ここで簡単な問題。ここでは、ベクトルを使用した代入の問題を少し扱っています。私は1つのクラス、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;
これが特に私が主張する原因です。