簡體   English   中英

訪問指針數組中的元素

[英]Accessing elements in an array of pointers

我在訪問指針數組的元素時遇到問題。 我會盡量減少班級。 這是處理我代碼中所有類型數據的頭文件的一部分,然后是源文件。 關於這些課程的一點點。 它們都是從Data類派生的。 class2是從class1派生的,而class3是class2的集合(數組)。

class class1
{
  public:
    class1(const char * S ) : Value(v), v(S)   {}
    class1(const class1 &S) : Value(v), v(S.v) {}
    Str &Value;
  private:
    Str v;
};

class class2 : public class1
{
  public:
    class2( const char * N, const char * V) : class1(V), n(N) {}

  protected:
    Str n;
};

class class3;
{
  public:
    class3 (                               ) {datum = 0;}
    class3 (const class3 &D                ) {set(D) ;}
    class3 (const class2 &S                ) {datum = 0; *this+= S;}
    class3 (const char * nm, const char * v) {datum =0; *this+=class2(nm,v);}

    class2 & operator [] = (const char *N);
    Data & operator += (const Data & D);
    operator class2 * () {return datum? *datum : 0}
    operator class2 **() {return datum? datum : 0}

  protected:
    class2 ** datum;
    class3 & set (const class3 &D);
};

這是源文件的一部分。

class3 & class3:: set (const class3 &S)
{
  int ents = S.Strs ();  // How many elements in array
  datum = new StrDatum * [ents + 1];

  int i;
  for (i = 0; i < ents; i++)
  {
    datum[i] = new StrDatum (*S.datum[i]);
  }
  datum[i] = 0;
  return *this;
} 
Data & class3::Operator += (const Data & D) // Data is the base class for all data-type classes
{
  if (D.Is (class2Dtype)) // dataType enum {class2Dtype = 2; class3Dtype = 3; etc... }
  {
    int ents = this->Strs();
    class 2 ** tmp = new class2 * [ents +1];

    int i;

    for (i=0; i < ents; i++)
    {
      tmp[i] = datum[i];
    }
    tmp[i++] = (class2 *) MakeMe (D); // Create a class2 instance
    tmp[i] = 0;
    delete [] datum;
    datum = tmp;
  }
  return *this;
}

好。 我已經創建了數組,正在嘗試訪問它。 我可以訪問第一個元素,但是當我嘗試訪問第二個元素時,出現了分段錯誤。

// I create an instance of recordScreen where the array of pointer is created.
// This class has a method called GetData which retrieves the array
// In recordScreen.h
//   class2 & GetData(void);

recordScreen recSc; 
recSc.run();          // The array is created

// If want to see the first element value
Str data = ((class2 *)recSc.GetData())[0].Value; // This works fine.

//But when I try:
Str data2 = ((class2 *)recSc.GetData())[1].Value; // Segmentation Fault

// I check how many elements it has.
class3 test = recSc.GetData();
cout << "Elements = " << test.Strs() << endl; // Output = 2

順便說一句,我沒有寫任何這些類,但是我試圖弄清楚它們是如何工作的。 如果還有其他需要補充的地方,請告訴我。

嗨,我剛剛找到一種訪問數組元素的方法。 這比我想的容易得多。

recordScreen recSc; 
recSc.run();          // The array is created

class2 ** item;
item = recSc.GetData();

cout << item[0]->Value << endl; // First element
cout << item[1]->Value << endl; // Second element

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM