错误:字段'children'具有不完整类型'Node [2]

时间:2016-10-23 16:29:18

标签: c++ c++11 binary-tree nodes treenode

当我运行此代码时,我收到错误:“字段'子项'具有不完整类型'节点[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;
}

2 个答案:

答案 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;)。