【发布时间】:2012-10-05 12:59:57
【问题描述】:
您好,我在 C++ 中有以下类层次结构
Class1 {
vector<Class2> vecClass2;
}
Class2 {
private:
const Class1 * ptrClass1;
vector<Class3> vecClass3;
public:
Class2(const Class1 * ptrClass1);
int intC2publicVar;
string strC2publicVar;
}
Class3 {
private:
const Class2 * ptrClass2;
vector<Class4> vecClass4;
public:
Class3(const Class2 * ptrClass2);
}
Class4 {
private:
const Class3 * ptrClass3;
vector<Class5> vecClass5;
public:
Class4(const Class3 * ptrClass3);
void class4Method() const;
}
在 class4Method() 中我正在做这样的事情:
void Class4::class4Method() const {
const Class2 * pC2 = ptrClass3->ptrClass2;
int valClass2 = pC2->intC2publicVar;
//Above value is giving wrong value, I have no idea from where it is fetching the wrong value
string strVatClass2 = pC2->strC2publicVar;
//Above line of code cause run time termination of code and programs stops as soon as this line executes.
const Class2 c2 = * pC2;
//Above line of code cause run time termination of code and programs stops as soon as this line executes.
}
我不知道为什么在 Class4 的 class4Method() 中会发生这种情况。请帮我解决这个问题。我的整个项目都因为这个问题而受到打击,如果不解决它,我就无法继续前进。
【问题讨论】:
-
数据成员指针初始化了吗?
-
你方法的第一行:
const Class2 * pC2 = ptrClass3->ptrClass2;你访问Class3的私有成员。这不应该编译。从运行时的角度来看,之后的任何事情都没有实际意义。 -
@DanishAltafSatti 我的猜测是您正在创建指向局部变量的指针,这可以解释为什么值在构造函数中正确打印,但在您发布的代码中没有正确打印。但是没有看到更多代码,只是猜测。
-
如果公共/私有是问题,它将无法编译。正如 Fiktik 所说,您发布的 cdoe 不应该编译。当发布的代码只是大致正在使用的代码时,很难解决问题。所以,我什么都不确定。
-
@DanishAltafSatti 我放弃了,没有看到真实代码(而不是代码描述,以及真实代码的近似值)恐怕很难提供帮助。如果您想解决此问题,我建议您发布真实完整的代码。如有必要,请在发布之前减小程序的大小。将其缩减为仍然存在错误的最小完整程序,然后他们发布整个程序。这样,您将很快将其修复。目前你只是在浪费时间。
标签: c++ class pointers constants