C ++ - 从类中包含typedef结构

时间:2017-01-06 09:10:04

标签: c++ struct include

我的问题是关于包含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 ++中工作?

我希望我没有错过任何细节。非常感谢你的帮助!

1 个答案:

答案 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.hgraph.cpp中加入Graph.h时,它会了解EdgeInfo