当我运行此代码时,我收到错误:“字段'子项'具有不完整类型'节点[0]'”。我在C ++编码,我想创建一个Node类,它本身创建两个其他Node对象,依此类推,直到达到maxDepth。我得到的完整错误:
18:24:16 **** Incremental Build of configuration Debug for project Tests ****
make all
Building file: ../main.cpp
Invoking: Cross G++ Compiler
g++ -std=c++0x -O3 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
../main.cpp:22:17: error: field ‘children’ has incomplete type ‘Node [2]’
Node children[2];
^
../main.cpp:8:7: note: definition of ‘class Node’ is not complete until the closing brace
class Node {
^
make: *** [main.o] Error 1
subdir.mk:18: recipe for target 'main.o' failed
代码:
#include <iostream>
using namespace std;
class Node {
public:
int depth;
bool value;
Node(bool value, int depth, int maxDepth) {
this->value = value;
this->depth = depth;
if (this->depth < maxDepth) {
children[2] = {Node(false, this->depth + 1, maxDepth), Node(true, this->depth + 1, maxDepth)};
}
}
private:
Node children[2];
};
int main() {
Node tree(false, 0, 1);
return 0;
}
答案 0 :(得分:0)
您已定义类Node
以包含Node
个对象的数组:
private:
Node children[2];
Node
不能包含其他Node
,因为它必须具有足够大的固定大小以包含其成员。 可以包含指向其他Node
个对象的指针,这可能是你在这种情况下应该使用的:
private:
Node *children[2];
这意味着您必须将作业重新写入children
数组(无论如何都是不正确的),以便它分配Node *
类型的值:
// Incorrect:
// children[2] = {Node(false, this->depth + 1, maxDepth), Node(true, this->depth + 1, maxDepth)};
children[0] = new Node(false, this->depth + 1, maxDepth);
children[1] = new Node(true, this->depth + 1, maxDepth);
答案 1 :(得分:0)
真正的问题是&#34; Node&#34;当时未定义&#34; Node children [2];&#34;是编译器遇到的。你可以有一个指向它的指针,但是在完全定义它之前不能对它进行实例化(在到达结束时#34;}&#34;)。