4

私はEffective C++を読んでいて、「constnessだけが異なるメンバー関数はオーバーロードできる」と言っています。

本の例は次のとおりです。

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)' と異なるだけです

違いはなんですか?クラスを修正して、get_message の const バージョンと非 const バージョンを使用する方法はありますか?

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 に答える