2012-04-19 4 views
-1

У меня есть 3 класса, закодированных в C++. Все они просты, но компилятор дает много ошибок. Каждый класс в файле cpp и файле заголовка. Какие могут быть возможные проблемы? Один из них - «базовый класс неопределенный».Простые классы вызывают ошибку

class re { 
    int i; 
    int j; 
    string a; 
    re(int,int,int); 
    ~re(); 
} 

class Pre:public re { 
    int k; 
    public: 
    Pre(int,int,int); 
    ~Pre(); 
} 

class MPre:public Pre { 
    int z; 
    public: 
     MPre(int); 
    ~Mpre(int); 
} 
+8

Определения классов должны заканчиваться точкой с запятой (";"). Используете ли вы пол-двоеточия в своем фактическом коде? (вы не используете его в своем примере). – mfontanini

+2

Можете ли вы опубликовать ошибки, я имею в виду то, что вы вставили, может быть, потому что в конце определения класса нет конца ';', но мне трудно догадаться. – EdChum

+0

Я поставил точку с запятой, все еще есть ошибки. –

ответ

2

Возможные ошибки: конструктор класса

  • повторно не является публичной. Вы знаете об этом?

  • Конструктор MPre получает один вход, поэтому вам нужно написать конструктор по умолчанию для Pre-класса.

  • Будьте внимательны при добавлении файлов заголовков. Например, для класса Pre требуется re-class 'header file.

  • Кроме того, вам не нужно писать деструктор, если не добавить переменные-указатели на

+1

Вам нужен виртуальный деструктор, если вы будете использовать наследование. – AlexTheo

+2

Вам также понадобится деструктор, если у вас есть выделенные ресурсы, а не только память, но такие вещи, как файлы и т. Д. –

0

классов Для ошибки undefined base class, я думаю, вы не #include d файл, в котором класс re является объявлен в файлах, где находятся другие классы.

0

В объявлении классов отсутствуют точки с запятой. Также для хорошего разделения всех классов в разных файлах .h .cpp, чтобы избежать нежелательного использования нежелательного кода, если он вам не нужен. Также в случае наследования убедитесь, что ваши деструкторы являются виртуальными, в противном случае это приведет к утечке памяти.

Также конструктор re не является общедоступным.

Смежные вопросы