gpt4 book ai didi

c++ - 使用重载的下标运算符赋值

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:55 26 4
gpt4 key购买 nike

我正在尝试使用下标运算符创建从 1 开始索引的自定义数组。获取值工作正常,但我不知道为什么使用下标运算符分配不起作用。

class CEntry {
public:
CKey key;
CValue val;

CEntry(const CKey& key, const CValue& val) {
this->key = key;
this->val = val;
}

CEntry& operator= (const CEntry& b) {
*this = b;
return *this;
};
};

...

class EntriesArray {    
public:
CEntry **entries;
int length;

EntriesArray(int length) {
this->length = length;
entries = new CEntry*[length];
int i;
for (i = 0; i < length + 1; i++) {
entries[i] = NULL;
}
};

CEntry& operator[] (const int index) {
if (index < 1 || index > length) {
throw ArrayOutOfBounds();
}
return *entries[index - 1];
};

};

这样构造数组

EntriesArray a(5);

这行得通

 a.entries[0] = new CEntry(CKey(1), CValue(1));
cout << a[1].val.value << endl;

这行不通

a[1] = new CEntry(CKey(1), CValue(1));

编辑:

使用

CEntry *operator=( CEntry *orig)

编译成功,但 gdb 停止在

No memory available to program now: unsafe to call malloc warning: Unable to restore previously selected frame

有回溯

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00007fff5f3ffff8
0x00000001000013c8 in CEntry::operator= (this=0x0, orig=0x1001008d0) at /Users/seal/Desktop/efa du2_pokus2/efa du2_pokus2/main.cpp:20
20 /Users/seal/Desktop/efa du2_pokus2/efa du2_pokus2/main.cpp: No such file or directory.
in /Users/seal/Desktop/efa du2_pokus2/efa du2_pokus2/main.cpp

最佳答案

起初……这个:

CEntry& operator= (const CEntry& b) {
*this = b;
return *this;
};

不应该工作(这应该导致 operator= 的递归调用)。

第二件事是您尝试将 CEntry * 分配给 CEntry,如果您有 CEntry *operator=( CEntry *orig ),但我认为这是不好的编码习惯。

关于c++ - 使用重载的下标运算符赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9072794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com