设置私有数据成员

时间:2014-03-15 06:44:00

标签: c++ class pointers boolean

我有一个私有布尔数据成员(值),它是类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。我唯一能想到的可能是我需要一个复制构造函数?如果是这种情况,我不完全确定如何在这种情况下实施。

谢谢!

2 个答案:

答案 0 :(得分:1)

您没有初始化指向Bar对象的指针及其值。您需要通过有效对象初始化指针,然后设置其值以使其为true。此外,如果需要,请在Bar的构造函数中初始化默认值。

答案 1 :(得分:1)

发生的事情是您没有在value的构造函数中初始化Bar的值。所以它开始的值基本上是在它构造的堆栈上随机出现的值 - 值是不确定的,并且可以在运行之间变化。

通过在value构造函数中初始化Bar来解决此问题,例如定义构造函数,例如:

Bar::Bar()
    : value(false) {}

在你的班级声明中相应地声明它,你应该设置。

相关问题