我遇到了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)
而没有编译错误。
可能我的方法完全错了,但使用当前的“技能”:)我不知道如何解决它。
提前感谢您的任何帮助和建议。
答案 0 :(得分:7)
我认为这不是你的实际代码,首先是因为它有语法错误,其次是因为它实际上是正确的(大多数情况下)。更具体地说,使用这段代码,quxBar->setX(100);
会导致编译错误。
但是,quxBar->getX()
也是编译错误,你需要告诉编译器可以在const对象上调用,你可以通过在函数签名末尾添加const
来实现: / p>
int getX() const { return x; }
也许在您的实际代码中,您有Bar* const quxBar
而不是Bar const* quxBar
;它们意味着两个不同的东西:前者是Bar的 const指针,而后者是指向 const Bar 的指针。例如。在前面的例子中,只有指针本身不能修改,但它指向的对象可以。