2013-06-04 61 views
4

我在閱讀Effective C++,它告訴我'成員函數只能通過它們的常量不同而被重載'。C2556:重載函數只有返回類型不同

書中的例子是:

class TextBlock { 
public: 
    const char& operator[](std::size_t position) const; 
    char& operator[](std::size_t position); 

private: 
    std::string text; 
} 

我下面的例子中,使用存儲的指針。

class A { 
public: 
    A(int* val) : val_(val) {} 

    int* get_message() { return val_; } 

    const int* get_message() { return val_; } const; 

private: 
    int* val_; 
}; 

我得到:

錯誤C2556: 'const int的* A :: get_message(無效)':重載函數返回類型從「詮釋的不同僅僅* A :: get_message(無效) '

有什麼區別?有什麼辦法可以修復這個類,所以我有一個const和非const的get_message版本?

+1

你混淆的*常量性是函數返回與*本身的功能*常量性*。 –

回答

15

你把const預選賽你get_message()功能在錯誤的地方:

const int* get_message() const { return val_; } 
//      ^^^^^ 
//      Here is where it should be 
+0

''''後面的'''應該被刪除? – taocp

+0

@taocp:絕對沒有注意到。謝謝,編輯:) –

+1

原來的聲明甚至意味着什麼? –

相關問題