2010-10-12 114 views
1

我遇到了C++類的這個問題。我想獲得指向myBar對象的對象,並將其存儲在quxBar中。原因是我希望能夠使用quxBar->getX()來檢查價值,但我也想避免意外地從Qux中調用它,所以我嘗試使用Bar const*C++指向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

你能至少發佈實際編譯的代碼嗎?當我修復了所有顯而易見的編譯錯誤(不正確的分號等)時,我得到了以下幾個錯誤:'將const Bar'作爲'int'的Bar參數'getX()'丟棄限定符' 。 – 2010-10-12 11:06:58

+0

我認爲你的編譯器有問題。你使用什麼編譯器? – Goz 2010-10-12 11:34:33

+0

你根本沒有得到一個錯誤或只是在那一行?你需要在你的類定義的最後一個分號。 – CashCow 2010-10-12 12:28:52

回答

7

我不認爲這是你的實際代碼,首先是由於它的語法錯誤,其次是由於它實際上是正確的(大部分)。更具體地說,使用這段代碼,quxBar->setX(100);會導致編譯錯誤。

int getX() const { return x; } 

也許:

然而,quxBar->getX()也將是一個編譯錯誤,你需要告訴可以在const對象調用編譯器,可以通過在函數簽名的末尾添加const做到這一點在你的實際代碼你有Bar* const quxBar而不是Bar const* quxBar;它們是指兩種不同的東西:前者是常量指針來Bar,而後者是指向const指令杆。例如。在前面的例子中,只有指針本身不能被修改,但它指向的對象可以。

+0

+1爲正確的方式。 – sje397 2010-10-12 11:16:03

+0

謝謝,實際上「Bar * const quxBar」而不是'Bar const * quxBar'「沒有任何問題。原始代碼中使用的QList指針存在一些問題。 – Moomin 2010-10-12 12:08:51