首先让我解释一下我在这里要完成的事情,基本上我在游戏中做一些基本的寻路,为此我构建了一个非常简单的类Node,在节点内部我有一些变量和函数,但为了使我的寻路算法工作,我将需要能够回到我正在查看的当前节点的父节点,所以我需要每个节点包含他们的父节点,它更容易理解在代码中如此错误写下一些示例代码。
我试过这样做,但我只是得到一个错误,例如“不允许不完整的类型”所以我猜我在这里做了一些非常错误的事情。
class Node {
int f_score, g_score, h_score; //just a few variables used for pathfinding.
Node parent_node; //parent node as explained above
Node(void); //just a function.
}
所以我很容易看到我想在这里完成什么,我只想尝试一个同类的对象,对不起,如果我很难理解,但我尽力解释,任何帮助都将大大赞赏。
答案 0 :(得分:0)
由于在类本身中包含类型Node
的成员时,类Node
的定义尚未完成,因此编译器尚无法确定为该成员分配多少空间(this这就是为什么它被称为“不完整”)。相反,对成员使用类型Node*
,如果使用C ++ 0x则使用std::auto_ptr<Node>
,或者如果使用C ++ 11则使用std::weak_ptr<Node>
。
答案 1 :(得分:0)
您必须将成员字段限制为指针(节点*)。
您不能使用内联对象成员,因为此时编译器尚未关闭&#34;节点类型。
您的原始示例将创建一个包含节点的节点,其中包含节点...您可以在Java或C#中使用类似的表示法,因为内联对象实际上是引用(指针),而不像C ++那样内联。
class Node {
Node * parent;
public:
Node() : parent(nullptr) {}
Node(Node*parent)
: parent(parent) // this is ok
{
}
}; // type is now closed
答案 2 :(得分:0)
公开宣传。试试这个:
class Node {
//Make it public so it's accessible.
public:
int f_score, g_score, h_score;
Node* parent_node;
//Make the "Node(void);" function do something or take it out.
};
哦,是的,让功能做某事或删除它。对我来说,当我尝试它时,它会导致构建错误。当我删除该功能时它起作用了。