我的问题是关于包含typedef结构(或者至少我认为是)。这可能很愚蠢,但我无法弄清楚我的代码有什么问题。
我有一个Node.h
标头声明了一个类Node
:
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
};
所以我发现这是我代码中唯一可以声明struct
的地方,因为这是我唯一可以声明EdgeInfo
“知道”Node
类对象的地方是
然后我有一个Graph.h
标头,包括Node.h
文件,它声明了一个Graph
类。
现在在Graph.cpp
文件中,我正在实现一个循环在Node
的所有传出边缘的函数,或多或少像这样:
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 ++中工作?
我希望我没有错过任何细节。非常感谢你的帮助!
答案 0 :(得分:2)
&#34; 所以我发现我的代码中唯一的地方我可以声明结构,因为这是我可以声明EdgeInfo的唯一地方&#34;知道& #34;什么是Node类对象。&#34;
您可以使用forward declaration。另一个链接:forward declaration, stackoverflow。
class Node; // forward declaration
struct EdgeInfo
{
Node* node; // now, `EdgeInfo` knows that a class named `Node` is defined somewhere.
double weight;
};
class Node {
public:
Node(/*some parameters*/); // Class constructor
vector<EdgeInfo*> OutEdges; // This vector represents the outgoing weighted edges from this node
};
现在,当您在node.h
或graph.cpp
中加入Graph.h
时,它会了解EdgeInfo
。