0

我有一组存储静态 const 数据成员的实用程序类。现在我需要在函数类中使用这些数据成员。我打算使用对静态 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的,因此您在将对象声明为时违反了约定const

有2个选项:

  • const从_static const staticData data1;
  • 做参考constconst 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 回答