4

我正在阅读 Effective C++,它告诉我“仅通过常量不同的成员函数可以被重载”。

本书的例子是:

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(void)”:重载函数仅与“int *A::get_message(void)”的返回类型不同

有什么区别?有什么办法可以修复这个类,所以我有一个 const 和非常量版本的 get_message?

4

1 回答 1

15

您将函数的const限定符get_message()放在错误的位置:

const int* get_message() const { return val_; }
//                       ^^^^^
//                       Here is where it should be
于 2013-06-04T17:29:13.787 回答