[英]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.