2011-12-02 7 views
2

これは私が持っているクラスのヘッダとソースです。同じような他のクラスがあります。これらのクラスはすべて、1つのセントラルクラスに含める必要があります。このエラーは少しあいまいなようだが、私はコードの少し古い作業バージョンを持っており、唯一の違いは、ということですこのヘッダーにこのエラーの原因が含まれているのはなぜですか?

error C2582: 'operator =' function is unavailable in 'Node' 

:以下、ヘッダー内のファイルGameObject.h含めしかし

は、エラーが発生しますノードはGameObjectから継承するようになりました。

ヘッダー:

#ifndef NODE_H 
#define NODE_H 

#include <d3d10.h> 
#include <d3dx10.h> 
#include "GameObject.h" 

class Mesh; 

class Node : public GameObject 
{ 
public: 
Node(Mesh& mesh); 
}; 

#endif 

ソース:コールスタックで

#include "Node.h" 
#include "Mesh.h" 

Node::Node(Mesh& mesh) : GameObject(mesh) 
{ 

} 

私は最終的には、原因としてノードオブジェクトのベクトルの宣言を指摘していますが、私は、なぜこの見当がつかないgameObjectから継承し、ベクターにも存在する他のオブジェクトが存在するため、起こっています。

std::vector<Node> nodes; 
+6

なぜ 'GameObject.h'は' Node.h'を含めるようにする必要がありますか?コードを表示してください。 –

+0

なぜ「gameobject.h」に「node.h」を含めていますか? – Naveen

+0

私はそれをどこでやっていると言いましたか?私は質問を読んで、それを見ることができません。私の部分の文法は間違っていますか? – SirYakalot

答えて

1

However, including the file GameObject.h in the header below causes an error:

これは、加工および非加工コードとの間の唯一の違いは、そのヘッダファイルを含むことであることを意味しかし

I have a slightly older working version of the code, and the only difference is that Node now inherits from GameObject.

これは、別の差があることを意味:Nodeは現在GameObjectから継承しています。問題を引き起こしている相続財産を含めるのはどちらですか?

問題の原因となっているのが継承であると仮定すると、はGameObjectにプライベートまたは他の方法で使用できないと思います。 vectorはオブジェクトをコピーしたいので、GameObjectNodeの両方で利用できるoperator=が必要です。

GameObject内に参照があると、コンパイラが自動代入演算子を提供できなくなり、Nodeに自動代入演算子が設定されないことがあります。要するに

GameObjectの内側に、あなたがoperator=プライベートまたは(Mesh&のような)非静的参照のいずれかを持っている、場合は、使用するvectorためNode::operator=を作成する必要があります。

参考

+0

私はgameObjectの中のメッシュへの参照を持っています。あなたは素晴らしいです。なぜこれがゲームオブジェクトを継承する他のクラスにも影響しないのでしょうか? – SirYakalot

+0

私は、他のオブジェクトの中に 'operator ='の呼び出しがないと仮定することができます。 player1 = player1'や 'players.push_back(相手)'と言うのではなく、他の方法で代入演算子が必要なこともあります。 –

+0

参照:http://stackoverflow.com/questions/4774508/c-c2582-compiler-wont-auto-generate-default-ctor-or-operator –

関連する問題