2013-09-01 54 views
1

我有问题想实现它包含一个指向布尔类...C++指针布尔值

class BoolHolder { 
    public: 
    BoolHolder(bool* _state); 

    bool* state; 
} 

BoolHolder::BoolHolder(bool* _state) { 
    state = _state; 
} 

bool testbool = false; 

BoolHolder testbool_holder(&testbool); 

如果我这样做,testbool_holder.state始终报告说,它是真实的,不管testbool本身是真是假

我在做什么错?我只想让该类能够为testbool保持最新的值,但我不知道如何实现这一点。谢谢

+0

至少在你真的需要这些语义时使用引用。 – chris

+2

'state'将始终是一个非空指针,因此测试为'true';你需要'*国家'。 –

+0

如果你想要一个更持久的指针(任何类型)的标准方式看看['std :: unique_ptr'](http://en.cppreference.com/w/cpp/memory/unique_ptr)。要创建它,例如'std :: unique_ptr testbool_holder {new bool {false}};'并测试它是否执行'if(* testbool_holder)' –

回答

2

testbool_holder.state返回true,如果状态是不是一个空指针

*(testbool_holder.state)返回布尔值指向状态

尝试此更C++溶液

class BoolHolder 
{ 
public: 
    BoolHolder(bool* state) : state(state) {} 
    bool GetState() const { return *state; } // read only 
    bool& GetState() { return *state; } // read/write 

private: 
    bool* state; 
} 

bool testbool = false; 
BoolHolder testbool_holder(&testbool); 
if (testbool_holder.GetState()) { .. } 

取出第二如果你只想允许读取权限(也许将指针改为const bool *),如果你想要两者,那么你需要两个getter。 (这是因为读取/写入不能用于读取const对象)。

+0

如果是我,我会使用引用而不是指针。相识又有差别。 :) –

+0

@JoachimPileborg我在课堂上避免引用成员。如果您想复制课程或稍后更改状态,该怎么办? –

+0

@SteveJessop我的不好 –

1

是的。你所拥有的不是布尔值的值,而是一个指向布尔值的指针。您必须取消引用指针以获取bool本身的值。既然你有一个指针,它将包含一个整数的地址。由于在C和C++中所有的非零整数都是真的,你会变成真的。