私の質問は、typedef構造体の包含に関するものです(少なくとも私はそうだと思います)。おそらくばかげているかもしれませんが、私のコードで何が間違っているのか理解できませんでした。C++ - クラス内からのtypedef構造体の包含
私はクラスNode
を宣言Node.h
ヘッダを持っている:
class Node {
public:
Node(/*some parameters*/); // Class constructor
typedef struct{ // This represents a weighted edge of weight "weight" from the current node to another node "node"
Node* node;
double weight;
}EdgeInfo;
vector<EdgeInfo*> OutEdges; // This vector represents the outgoing weighted edges from this node
};
だから私はそれはそれは私が」というEdgeInfo
宣言することができる唯一の場所だから、私はstruct
を宣言することができます私のコードで唯一の場所だ考え出しましたNode
クラスオブジェクトが何であるかを知っています。
次に、私はGraph.h
ヘッダーを持っています。Node.h
ファイルを含み、Graph
クラスを宣言しています。
は、今私は、多かれ少なかれ、このように、Node
のすべての発信エッジにループ機能を実現していますGraph.cpp
ファイルに:
Node* current = /*passing an object of class Node*/
for(EdgeInfo* out : current->OutEdges){
/*working on the edges*/
}
問題は、私はコンパイル時に、私はエラーを取得するということですerror: ‘EdgeInfo’ was not declared in this scope
、ループはfor
です。
おそらく私はC++初心者のような人です。 Node.h
を含めることで、変数と関数を使用するのと同じ方法で、クラス内で'typedef struct`定義を使用できると思いました。私が間違っている?または、C++での作業の仕組みを理解できませんでしたか?
私は詳細を見逃さないことを願っています。助けてくれてありがとう!
'Node :: EdgeInfo'。しかし、なぜあなたはその時点で 'typedef'を使うのですか?それらはC++では必要ではありません(通常、そのコンテキストで)。 – Zeta
@Zetaなぜですか?代わりにあなたは何をしますか? – jackscorrow
@Tommaso Scarpa C++では、 'struct'または' class'を宣言するためにキーワード 'typedef'を使う必要はありません。それは有効ですが必須ではありません。 'struct'を宣言することができます: 'struct S {int a; }; 'そして、あなたは' struct S'のインスタンスを宣言します: 'S s; sa = 10' – nikau6