C2556:重载函数仅因返回类型而异

时间:2013-06-04 17:28:07

标签: c++ const

我正在阅读有效的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和非const版本的get_message?

1 个答案:

答案 0 :(得分:15)

您将const功能的get_message()限定符放在了错误的位置:

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