Несоответствие в обязательных для расширения классах?

0

Это скорее случай, когда что-то работает, когда я чувствую, что этого не должно было быть. Я не совсем уверен, что это подпадает под обычную сферу действия этого сайта, но мне это очень интересно, поэтому я подумал, что просить не помешает.

Используя dev-С++ IDE, я работаю над одним из самых популярных проектов "make ATM" в учебнике. В нем находится базовый класс учетной записи, в котором есть все члены и набор виртуальных функций, а также классы проверки и сохранения, которые предназначены для расширения его функциональности, характерной для этих типов учетных записей.

Когда я попытался реализовать Checking.h как таковой;

#ifndef CHECKING_H
#define CHECKING_H

class Checking : public Account
{
private:
...

он бросил "ожидаемое имя класса до {" ошибка в строке 5 (и "объект, не определенный в области видимости" в каждом экземпляре Account :: *, конечно), пока я не включил Account.h. Однако эта простая ошибка заняла некоторое время, чтобы найти, потому что я сравнивал файл с Savings.h, который скомпилирован отлично, но, похоже, не нуждается в том же включении. Код выше не удался, но приведенный ниже в нем собственный Savings.h, и, похоже, работает нормально:

#ifndef SAVINGS_H
#define SAVINGS_H

class Savings : public Account
{
protected:
...

Итак, у меня есть все мои классы как отдельные файлы в одном каталоге и два производных класса в моем проекте. Оба расширяют один и тот же базовый класс, оба используют его члены, расширяют некоторые его функции и напрямую вызывают другие, но только один из них требует, чтобы базовый класс.h включался в компиляцию. Любые обычные подозреваемые в том, почему это было бы?

  • 0
    #include основном выполняет копирование. просмотрите свой проект и решите это.
Теги:
inheritance
dev-c++

1 ответ

0

Вероятным кандидатом на эту проблему является то, что вы компилируете файл, который выглядит примерно так:

#include "Account.h"
#include "Savings.h"

...

Поскольку "Account.h" включен до "Savings.h", определение класса Account рассматривается до определения класса " Savings ". Так что проблем нет. Вернее, проблема скрыта. "Savings.h" должен по-прежнему включать "Account.h", даже если проблема в некоторых случаях исчезает.

  • 0
    В моем main.cpp есть #include "account.h" #include "checking.h" #include "savings.h" ?
  • 0
    @ user3377275: Это вопрос?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню