【发布时间】:2013-09-07 16:30:05
【问题描述】:
这里的问题很简单。我在这里用向量处理一些赋值问题。 我有一门课,Inventory:
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,似乎存在断言失败,特别是“向量迭代器不兼容”。奇怪的是,这发生在 clear() 上。我不知道这里发生了什么。如果有人能给我一些帮助,那就太好了。
下面是一个例子。使用指针数学,我们可以通过从基数中减去当前客户端的播放器结构来确定客户端编号:
clientNum = newcl - svs.clients;
这正是导致我断言的原因。
【问题讨论】:
-
你知道
items.clear()是做什么的吗?你的循环没有运行。 -
请提供SSCCE。
-
rtSide.items.begin() , items 是一个私有变量,可以像这样直接访问?
-
@jayadev:是的,A 类可以访问其他 A 类实例的私有成员。 Private 只表示“其他类不能碰这个”。这与类的实例无关。
-
在不知道您使用哪个编译器的情况下:
__inline(很可能)是不必要的。 a) 在他们的类中定义的成员函数总是inline,b) 认可的关键字是inline。