我在使用 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)
而没有编译错误。
可能我的方法完全错误,但使用当前的“技能”:) 我不知道如何解决它。
在此先感谢您的帮助和建议。
最佳答案
我认为这不是您的实际代码,首先是因为它存在语法错误,其次是因为它实际上是正确的(大部分)。更具体地说,使用这段代码,quxBar->setX(100);
会导致编译错误。
然而,quxBar->getX()
也将是一个编译错误,你需要告诉编译器可以在 const 对象上调用,你通过添加 const
来做到这一点在函数签名的末尾:
int getX() const { return x; }
也许在您的实际代码中您有Bar* const quxBar
而不是 Bar const* quxBar
;它们意味着两个不同的东西:前者是指向 Bar 的 const 指针,而后者是指向 const Bar 的指针。例如。在前面的例子中,只有指针本身不能修改,但它指向的对象可以。
关于c++指向const类成员的指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3913932/