ошибка: поле «children» имеет неполный тип ‘Node [2]

Когда я запускаю этот код, я получаю сообщение об ошибке: «Поле« children »имеет неполный тип« Node [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;
}

-1

Решение

Реальная проблема заключается в том, что «Node» не определен в то время, когда «Node children [2]»; встречается компилятором. Вы можете иметь указатель на него, но не можете иметь его экземпляр до тех пор, пока он не будет полностью определен (при достижении закрывающего «}»).

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);
0

По вопросам рекламы [email protected]