0

static const データ メンバーを格納する一連のユーティリティ クラスがあります。ここで、関数クラスでこれらのデータ メンバーを使用する必要があります。static const オブジェクトへの参照 (ポインターは不要) を使用する予定ですが、以下のエラーが発生し続けます。コードの論理的/技術的な間違いを指摘していただけますか?

#include <string>

class staticData
{
  public:
   static const int cs = 1;
   static const staticData data1;

  private:
   staticData(int id_): _id(id_)   //NOTE: Private constructer, static access only!!
   { }

   int _id;
};

const staticData staticData::data1(1001);

class testReference
{
  public:
    testReference(): _member(staticData::data1)
    {}

  private:
    staticData& _member;
};

タイプ「const staticData」の式からのタイプ「staticData」の参照の無効な初期化

4

2 に答える 2

2

const非 const 参照を介してオブジェクトを参照しようとしています。

したがって、参照は non-constであるため、元のオブジェクトは参照を通じて変更できます。したがって、オブジェクトを として宣言したときに行った契約を破ることになりますconst

2 つのオプションがあります。

  • から削除constしますstatic const staticData data1;
  • 参照を作成しますconst:const staticData& _member;

編集:

あなたのコメントによると、あなたは持つことができます:

class testReference
{
  public:
    testReference(): _member(&staticData::data1)
    {}

  private:
    staticData const * _member;
};

この方法では、何_memberを指すかを変更できますが (参照では不可能)、オブジェクト自体を変更することはできません。

于 2012-06-05T14:15:45.607 に答える
1

_memberミューテーションを許可するリファレンスです。 data1不変です。読み取り専用オブジェクトの書き込み可能なビューを提供することは不可能です。

于 2012-06-05T14:16:09.697 に答える