当使用单例包含指针数组时,左值错误
error lvalue when use singleton contain array of pointer
My singleton like
class ValueLstNode {
private:
ZwNode* m_pZwNode[32];
public:
ValueLstNode();
ValueLstNode(const ValueLstNode& rhs);
static ValueLstNode& GetInstance();
virtual ~ValueLstNode();
ValueLstNode& operator= (const ValueLstNode& rhs);
ZwNode_p GetNode (int Posion) const;
ZwNode_p operator[] (int Posion);
const ZwNode_p operator[] (int byPosion) const;
};
和文件。cpp
ValueLstNode::ValueLstNode() {
for (u32_t i = 0; i < 32; i++) {
m_pZwNode[i] = NULL;
}
}
ValueLstNode::ValueLstNode(
const ValueLstNode& rhs
) {
for (u32_t i = 0; i < 32; i++) {
m_pZwNode[i] = rhs.m_pZwNode[i];
}
}
ValueLstNode&
ValueLstNode::operator= (
const ValueLstNode& rhs
) {
for (int i = 0; i < ZW_MAX_NODES; i++) {
m_pZwNode[i] = rhs.m_pZwNode[i];
}
return *this;
}
ValueLstNode::~ValueLstNode() {
for (int i = 0; i < ZW_MAX_NODES; i++) {
if (m_pZwNode[i] != NULL) {
delete m_pZwNode[i];
m_pZwNode[i] = NULL;
}
}
}
ValueLstNode&
ValueLstNode::GetInstance() {
static ValueLstNode m_instance;
return m_instance;
}
ZwNode*
ValueLstNode::operator[] (
int Posion
) {
return m_pZwNode[Posion];
}
const ZwNode*
ValueLstNode::operator[] (
int Posion
) const {
return m_pZwNode[Posion];
}
,
ValueLstNode m_ValueLstNode = ValueLstNode::GetInstance();
m_ValueLstNode[0] = NULL;
我得到错误:lvalue required…如何解决这个问题。帮助我。谢谢,rg。
您创建的内容实际上并不符合惯用的单例模式。让我们看看:
class ValueLstNode {
// ...
public:
ValueLstNode(); // You allow pulic construction of new instances
ValueLstNode(const ValueLstNode& rhs); // You allow new instances as copies
static ValueLstNode& GetInstance();
virtual ~ValueLstNode();
ValueLstNode& operator= (const ValueLstNode& rhs); // Well, may be the right intend,
// but not really idiomatic for a
// singleton
ZwNode_p GetNode (int Posion) const; // You return copies of your
// internally managed elements?
ZwNode_p operator[] (int Posion); // ^^^^ That
const ZwNode_p operator[] (int byPosion) const; // ^^^^ That
};
当你想在单例上操作时,你需要在这个类中保持状态。
所以你需要返回类成员作为引用来操作:
ZwNode_p& operator[] (int Posion);
const ZwNode_p& operator[] (int Posion) const;
而且你的单例实现应该明确地拒绝创建该类的副本:
class ValueLstNode {
ValueLstNode(const ValueLstNode&) = delete;
ValueLstNode& operator=(const ValueLstNode&) = delete;
};
和引用,如果你需要的话:
ValueLstNode& m_ValueLstNode = ValueLstNode::GetInstance();
虽然,我没有完全从你的命名中得到单例模式应用的用例。语义被打破了。
我不明白ValueLstNode
应该是一个单例有什么意义。你的意思是创建一个工厂模式吗?
相关文章:
- "错误:数组下标的无效类型'float [10001][float]'是什么意思?
- 错误:数组下标的类型"const bool[int]"无效
- Qt并发错误:数组初始化需要大括号括起来的初始值设定项列表
- 使用GCC 4.8构建错误:数组用作初始化器
- 如何修复问题中的"teminated due to timeout"错误 数组操作 |黑客兰克?
- | 9 |错误:非静态数据成员'matrix :: row'| 9 |错误:数组绑定不是在']']'令牌|之前的整数常数
- 错误:数组的总大小不得超过0x7fffffff字节
- 错误:无法将参数“1”的“double*”转换为“double”,错误:数组下标的类型“double[double]”无
- 返回并强制转换数组指针(错误:数组下标的类型..无效)
- 返回c++中的字符错误数组
- VC++错误:数组实例化的大小来自模板化的静态常量
- c++mex错误:数组下标的类型“double[mwSize]”无效
- 错误数组用作初始值设定项,我不知道错误
- 编译错误 - 数组下标'char[int]'的类型无效
- 向量在我的类中.错误:数组new [-fpermissive]中的圆括号初始化项
- 错误:数组下标的类型无效
- 错误:数组new中的size必须是整型[-fpermissive]
- 错误:数组下标的“Pixel*[__complex__ int]”类型无效
- c++错误数组显示
- C++:错误:数组下标的类型“size_t{aka long unsigned int}[size_t{aka long