我在访问指针数组元素时遇到问题。我会尽可能地减少课程。这是处理我的代码中所有类型数据的头文件的一部分,然后是源文件。关于这些classese的一点点。所有这些都是从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
是的,我没有写过这些课程,但我试图弄清楚它们是如何工作的。如果我还应该添加其他内容,请告诉我们。
答案 0 :(得分:0)
您好我刚刚找到了一种访问数组元素的方法。这比我想象的容易得多。
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