我有一个私有布尔数据成员(值),它是类Bar的一部分,我试图用另一个类Foo的指针访问它。但是,当我尝试使用指针访问数据时,就像我之前设置的数据重置时返回错误的值。 这是我正在谈论的一个例子,类Bar的头文件:
class Foo;
class Bar {
private:
bool value;
public:
void read();
bool isValue();
};
以下是源文件的示例。
void Bar::read() { //setter method that sets value to true.
value = true;
}
bool Bar::isValue() { //at this point if I called this it would
return value; //return true as expected.
}
Foo类的标题:
class Bar;
class Foo {
private:
Bar* barPtr; //a pointer to class Bar.
public:
void readValue();
};
和源文件:
void Foo::readValue() {
cout << barPtr->isValue(); //pointer that accesses and displays value.
}
最后一步是我遇到问题的地方。返回的值是0,false,我不明白为什么。当我打电话给cout&lt;&lt; barPtr-&gt; isValue()在我的main中它返回正确的值true。我唯一能想到的可能是我需要一个复制构造函数?如果是这种情况,我不完全确定如何在这种情况下实施。
谢谢!
答案 0 :(得分:1)
您没有初始化指向Bar
对象的指针及其值。您需要通过有效对象初始化指针,然后设置其值以使其为true。此外,如果需要,请在Bar
的构造函数中初始化默认值。
答案 1 :(得分:1)
发生的事情是您没有在value
的构造函数中初始化Bar
的值。所以它开始的值基本上是在它构造的堆栈上随机出现的值 - 值是不确定的,并且可以在运行之间变化。
通过在value
构造函数中初始化Bar
来解决此问题,例如定义构造函数,例如:
Bar::Bar()
: value(false) {}
在你的班级声明中相应地声明它,你应该设置。