1

我在使用 C++ 类时遇到了这个问题。我想获取指向myBar对象的指针并将其存储在quxBar. 原因是我希望能够检查使用的值,quxBar->getX()但我也想防止从 Qux 意外修改它,所以我尝试使用Bar const*.

class Bar
{
private:
    int x;
public:
    void setX(int X) { x = X; };
    int getX(){ return x };
}

class Foo
{
private:
    Bar *myBar;
public: 
    Bar const* getPointerToBar(){ return myBar; };            
}

class Qux
{
    void myMethod();
    Bar const* quxBar;
    Foo *mainFoo;    
}

void Qux::myMethod()
{
    quxBar = mainFoo->getPointerToBar();
    std::cout << quxBar->getX();
    quxBar->setX(100);  // HERE!!!
    std::cout << quxBar->getX(); // returns 100
}

不幸的是,它不起作用,因为我仍然能够在quxBar->setX(100)没有编译错误的情况下执行。

可能我的方法是完全错误的,但是使用当前的“技能”:) 我不知道如何解决它。

提前感谢您的任何帮助和建议。

4

1 回答 1

7

我认为这不是您的实际代码,首先是因为它存在语法错误,其次是因为它实际上是正确的(大部分)。更具体地说,使用这段代码,quxBar->setX(100);会导致编译错误。

但是,quxBar->getX()这也将是一个编译错误,您需要告诉编译器可以在 const 对象上调用,您可以通过const在函数签名的末尾添加:

int getX() const { return x; }

也许在您的实际代码中,您Bar* const quxBar使用的是Bar const* quxBar; 它们意味着两个不同的东西:前者是指向 Bar 的const 指针,而后者是指向const Bar的指针。例如。在前面的情况下,只有指针本身不能修改,但它指向的对象可以。

于 2010-10-12T11:13:07.340 回答