[英]Class forward declaration leads to incomplete type
我有以下代碼:
class Node;
class Edge {
public:
//Edge(Node originnode,Node targetnode,int weight):OriginNode(originnode),TargetNode(targetnode),Weight(weight){};
//~Edge(){};
//Node getOriginNode() const { return OriginNode;};
//Node getTargetNode() const { return TargetNode;};
int getWeight() const { return Weight;};
Node OriginNode;
Node TargetNode;
int Weight;
};
class Node{
public:
std::string getName();
std::vector<Edge> getEdges();
};
當我嘗試編譯時,編譯器聲稱OriginNode
和TargetNode
類型不完整。 我已經轉發了該節點。 我該如何解決?
您不能不提供Node
的完整定義。 您也可以將指針聲明為成員: Node* OriginNode
。
我建議您盡管重新考慮您的設計-Edge是否真的有一個Node。 與-一樣,它擁有所有權嗎? Node
不能在多個邊緣之間共享嗎? 另外,一個Node
真的包含多個邊嗎?
使用boost :: container可以更改聲明的順序,因為它支持不完整類型的容器:
class Edge;
class Node{
public:
std::string getName();
boost::container::vector<Edge> getEdges();
};
class Edge {
public:
//Edge(Node originnode,Node targetnode,int weight):OriginNode(originnode),TargetNode(targetnode),Weight(weight){};
//~Edge(){};
//Node getOriginNode() const { return OriginNode;};
//Node getTargetNode() const { return TargetNode;};
int getWeight() const { return Weight;};
Node OriginNode;
Node TargetNode;
int Weight;
};
順便說一句,為什么當您從Node獲取它們時為什么要返回Edge向量的值以及為什么要在Edge內部存儲OriginNode和TargetNode的值,您可以使用引用或指針代替(也許我是錯的,我不知道您的所有要求。
您應該顛倒聲明的順序
class Edge;
class Node{
public:
std::string getName();
std::vector<Edge> getEdges();
};
class Edge {
public:
//Edge(Node originnode,Node targetnode,int weight):OriginNode(originnode),TargetNode(targetnode),Weight(weight){};
//~Edge(){};
//Node getOriginNode() const { return OriginNode;};
//Node getTargetNode() const { return TargetNode;};
int getWeight() const { return Weight;};
Node OriginNode;
Node TargetNode;
int Weight;
};
不過,我認為類的設計非常糟糕。 Node是不包含Edge向量的原始實體。 為什么Node應該控制容器? 容器是比Node更高級的概括。 因此,與Node相比,它應該放置在更高的層次上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.