作者:dushearer304 | 来源:互联网 | 2022-12-02 16:30
我有一个存储和操作内存地址的结构.我决定改变从领域之一int
,以const int
确保它是只读的,突然我定义的操作符- ()以下消息抱怨:
函数"memAddress :: operator =(const memAddress&)"(隐式声明)不能被引用 - 它是一个已删除的函数
这是代码,
struct memAddress
{
// memory location variables
int die = 0;
int plane = 0;
int page = 0;
int column = 0;
int block = _BLOCK_STARTING_ADDRESS;
memAddress() {}
memAddress(const memAddress &m)
{
die = m.die;
plane = m.plane;
page = m.page;
column = m.column;
block = m.block;
}
bool operator<(const memAddress &m)
{
if (die > m.die)
return false;
else if (die == m.die)
{
if (plane > m.plane)
return false;
else if (plane == m.plane)
{
if (block > m.block)
return false;
else if (block == m.block)
{
if (page > m.page)
return false;
else if (page == m.page)
{
if (column >= m.column)
return false;
else
return true;
}
else
return true;
}
else
return true;
}
else
return true;
}
else
return true;
}
bool operator==(const memAddress &m)
{
if (die == m.die &&
plane == m.plane &&
block == m.block &&
page == m.page &&
column == m.column)
{
return true;
}
return false;
}
bool operator<=(const memAddress &m)
{
if ((*this (const memAddress &m)
{
if (!(*this <= m))
return true;
return false;
}
bool operator>=(const memAddress &m)
{
if ((*this > m) || (*this == m))
return true;
return false;
}
memAddress operator-(const memAddress &m)
{
memAddress diff, a1, a2;
if (*this
我不知道为什么会这样 - 如果修改器被删除,代码工作正常.
为什么更改字段修饰符会const
导致此行为?我该怎么办呢?
1> StoryTeller ..:
您对所有大写字母的使用(以及使用它进行初始化block
)表明您打算 _BLOCK_STARTING_ADDRESS
成为所有实例的类常量.
首先,让它静止不动
static const int _BLOCK_STARTING_ADDRESS = 2;
为什么?因为否则它是每个实例的数据成员.意味着每个实例都必须包含一小部分const
,并且默认情况下不能分配给该const位.由于这个原因,编译器无法为您生成默认赋值运算符.
另外,作为一方而不是._[A-Z]
以C++实现保留的名称保留给任何用途.为了避免鼻子恶魔的可能性,我建议你改变它的命名方案.也许甚至对一个少喊叫的人?