我有一组存储静态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;
};
从类型为“静态数据”
的表达式初始化类型为âstaticData&amp;â的引用无效答案 0 :(得分:2)
您尝试通过非const引用引用const
对象。
因此,原始对象可以通过引用进行修改,因为引用是非const
,因此您违反了将对象声明为const
时所做的合同。
有两个选项:
const
static const staticData data1;
const
:const staticData& _member;
编辑:
根据您的评论,您可以:
class testReference
{
public:
testReference(): _member(&staticData::data1)
{}
private:
staticData const * _member;
};
这样,您可以更改_member
指向的内容(不能使用引用),但您无法更改对象本身。
答案 1 :(得分:1)
_member
是允许变异的参考。 data1
是不可变的。提供只读对象的可写视图是不可能的。