Как использовать полиморфизм с классами из разных заголовочных файлов? - PullRequest
0 голосов
/ 12 декабря 2011

В моем заголовке "figure.h" есть класс Figure:

class Figure
{
    Color color;
    std::string position;
    ...
};

и я хочу определить класс King в заголовке "king.h". Так что в king.h я делаю #include "figure.h", и напишите для примера:

class King : public Figure
{
     char type;
     bool checkIfTypeIsValid(std::string);
     ...
};

Но, похоже, это не сработает, поскольку Кинг не распознает фигуру ... Что мне делать? И разумно ли иметь разные заголовки для разных унаследованных классов или просто смешать их вместе в "figure.h"? Потому что у меня будут фигуры королевы, епископа и т. Д., Которые сделают довольно много заголовков и импл файлы ..

Ответы [ 4 ]

0 голосов
/ 12 декабря 2011

Убедитесь, что king.h содержит #include "figure.h" или #include <figure.h>, пока figure.h находится на вашем пути включения в той же папке, что и king.h. Если вы используете Windows, заголовки включения могут иметь неправильный регистр. Во всем остальном убедитесь, что дело верно. Наконец, если определение Figure находится внутри пространства имен, вам необходимо добавить следующее:

class King : public some_namespace::Figure
{
   //....
};
0 голосов
/ 12 декабря 2011

Сначала вам нужно включить figure.h.

#include<Figure.h>

class King : public Figure
{
    ...
};
0 голосов
/ 12 декабря 2011

Проверьте включите путь для вашего компилятора.Это будет выглядеть так: -I "PATH_TO_DIR_WHERE_FIGURE_H_LOCATED", без кавычек.

0 голосов
/ 12 декабря 2011

Во-первых: вы не можете наследовать от неизвестного или даже частично известного класса.Чтобы определить King, вы должны сначала включить Figure.h (предположим, что King определено в другом файле).

В более общем смысле, относительно того, как организовать код, не существует одного определенногоответ.Лично, в одном конкретном случае (где число производных классов четко определено и строго ограничено), я бы, вероятно, обрезал углы и определил бы их все в Figure.h, но есть очень хорошие аргументы для использования отдельного заголовка длякаждый - если ничего другого, вам не нужно включать заголовки для отдельных фигур, за исключением файлов, в которых они созданы.Другим решением будет использование фабричных функций для фигур и определение производных классов в исходном файле, который реализует фабричные функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...