Страницы

Поиск по вопросам

четверг, 7 марта 2019 г.

Пользовательские классы, композиция

Файл tree.h:
#pragma once #include "node.h" class tree { node *rootNode;
public: tree(); ~tree(); };
Файл node.h:
#pragma once #include "tree.h" #include class node { public: std::string fromTree;
private: int valueint; int numberint; int parentint; int leftChildint; int rightChildint;
public: node(); ~node(); int value(); void value(int getV); int number(); void number(int getN); bool isRoot(); bool isEmpty(); int parent(); void parent(int getP); int leftChild(); void leftChild(int getLC); int rightChild(); void rightChild(int getRC); bool hasLeftChild(); bool hasRightChild(); };
На строчке
node *rootNode;
выдает ошибки:
error C2143: синтаксическая ошибка: отсутствие ";" перед "*" error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
Причем каждую по два раза. node цветом помечает, как положено. Не могу понять, что не так, учитывая, что в других программах аналогичная конструкция работает.
Visual Studio 2013


Ответ

У Вас файлы друг друга подключают, получается циклическая зависимость, что недопустимо. При подключении в файле node.h заголовочного файла с классом tree класс node еще не определен.
Вообще, непонятно, для чего он подключается, потому что он в файле node.h не используется.
Если все же нужно будет при объявлении классов, чтобы они использовали друг друга, лучше не подключать заголовки, если они не нужны (например, при использовании только указателей на класс без вызова методов класса), а использовать forward declaration. На примере файла tree.h это будет выглядеть так:
class node; class tree { node *rootNode;
public: tree(); ~tree(); };

Комментариев нет:

Отправить комментарий