在Foo中声明对象Foo
Declaring object Foo inside Foo?
首先,让我解释一下我在这里试图实现的目标,基本上我在游戏中做一些基本的路径查找,为此我构建了一个非常简单的类,名为Node,在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.
}
所以很容易看出我想在这里完成什么,我只是想有一个同类的对象,很抱歉,如果我很难理解,但我尽力解释了,任何帮助都将不胜感激。
必须将成员字段限制为一个指针(节点*)。
不能使用内联对象成员,因为此时编译器尚未"关闭"Node类型。
- 需要了解对象的存储大小
- 将创建一个无限递归的类型定义
您的原始示例将创建一个包含Node的Node。。。您可以在Java或C#中使用类似的表示法,因为内联对象实际上是引用(指针),而不是像C++那样内联。
class Node {
Node * parent;
public:
Node() : parent(nullptr) {}
Node(Node*parent)
: parent(parent) // this is ok
{
}
}; // type is now closed
由于在类本身中包含Node
类型的成员时,类Node
的定义还不完整,编译器还无法确定为该成员分配多少空间(这就是为什么它被称为"不完整")。相反,对成员使用类型Node*
,如果使用C++0x,则使用类型std::auto_ptr<Node>
,如果使用C++11,则使用std::weak_ptr<Node>
。
另请参阅:下一个结构项,不完整类型
将其公开。试试这个:
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.
};
哦,是的,让函数做点什么或删除它。对我来说,当我尝试它时,它会导致构建错误。当我删除函数时,它起作用了。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 有没有办法删除传递给函数"foo(新对象())"的对象?
- 为什么 clang++ 只销毁一个 foo 对象
- OOP 设计 - 处理整个 Foo 对象序列
- 在Foo中声明对象Foo
- 如何在<T>测试中实例化 MyType 中列出的 T 类 Foo 的对象?
- 命名空间中的'Foo' 'bar' 不命名头文件中对象成员的类型
- 属性错误: 'Foo'对象没有属性'max'
- 以下对象的名称未知:类Foo::Bar