gpt4 book ai didi

c++ - vector 迭代器在赋值重载中不兼容

转载 作者:太空宇宙 更新时间:2023-11-04 14:02:25 25 4
gpt4 key购买 nike

这里是一个简单的问题。我在这里用 vector 处理一些赋值问题。我有一门课,库存:

class Inventory
{
public:
__inline void operator=( const Inventory& rtSide )
{
items.clear();
for(auto it=rtSide.items.begin(); it!=rtSide.items.end(); ++it)
{
items.push_back(*it);
}
}
private:
std::vector<void*> items;
}

有一个包含类的结构:

typedef struct
{
Inventory *inventory;
} player_t;

在 player_t 的指针上分配/执行指针数学运算后,将调用 Inventory 的 = 重载,如您所料。但是,使用 MSVC,似乎存在断言失败,特别是“vector 迭代器不兼容”。奇怪的是,这发生在 clear() 上。我不知道这里发生了什么。如果有人能给我一些帮助,那就太好了。

这是一个正在发生的事情的例子。使用指针数学,我们可以通过从基数中减去当前客户端的播放器结构来确定客户端编号:

clientNum = newcl - svs.clients;

这正是让我断言的原因。

最佳答案

我怀疑您的指针算法导致尝试在 Inventory 上调用赋值运算符,但指针实际上并未指向 Inventory。 (例如,它可能指向一个 deleteInventory)如果是这样的话,vector 的内脏可能会充满随机垃圾,这可能会导致此类断言失败。

例如,您的来电者可能会做以下道德上的等价行为:

Inventory out;
Inventory* target = nullptr;
*target = out;

这可能会导致这些类型的断言失败。检查调用赋值运算符的代码。

(另请注意,您的赋值运算符不处理对自身的赋值;但在那种情况下,它只会清除 Inventory,不会导致断言失败)

关于c++ - vector 迭代器在赋值重载中不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18675455/

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