Форум программистов, компьютерный форум CyberForum.ru

Наследование - C++

Восстановить пароль Регистрация
 
Dkan
0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 31
30.10.2011, 18:11     Наследование #1
Создаю базовый класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <string>
 
using namespace std ;
 
class T
{
protected:
    string name ;
public:
    T( string ) ;
    void print() ;
};
Наследую о него другой класс(классы расположены в разных .h файлах):
C++
1
2
3
4
5
6
7
8
9
#include "T.h"
class C: public T
{
protected:
    int a ;
public:
    C( string, int ) ;
    void print() ;
};
Возникают 2 ошибки:
1) В файле T.h - 'class' type redefinition ;
2) В файле C.h - base class undefined.

Как исправить эти ошибки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2011, 18:11     Наследование
Посмотрите здесь:

C++ Наследование
Наследование C++
C++ наследование
C++ наследование
С++ Наследование C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
30.10.2011, 18:17     Наследование #2
Цитата Сообщение от Dkan Посмотреть сообщение
Создаю базовый класс:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <string>
 
using namespace std ;
 
class T
{
protected:
    string name ;
public:
    T( string ) ;
    void print() ;
};
Наследую о него другой класс(классы расположены в разных .h файлах):
C++
1
2
3
4
5
6
7
8
9
#include "T.h"
class C: public T
{
protected:
    int a ;
public:
    C( string, int ) ;
    void print() ;
};
Возникают 2 ошибки:
1) В файле T.h - 'class' type redefinition ;
2) В файле C.h - base class undefined.

Как исправить эти ошибки?
В том коде, который вы привели, никакого переопределения класса T не видно. Надо внимательно читать сообщение об ошибке, так как оно обычно содержит ссылку на тот класс, который, якобы, переопределяется.

Проблема скорей всего заключается в том,что вы эти два заголовка включаете в модуль с main, и поэтому заголовок T.h у вас включается дважды. Нужно вставитьстандартнуюзащиту от включенияз аголовока дважды, посредством объявления манифестной константны.
Dkan
0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 31
30.10.2011, 18:23  [ТС]     Наследование #3
Если не было бы не писал)

Error 1 error C2011: 'T' : 'class' type redefinition c:\...\T.h 6
Error 2 error C2504: 'T' : base class undefined c:\...\C.h 3

Указывает на символ { в каждом классе.

Добавлено через 58 секунд
Это как?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
30.10.2011, 18:27     Наследование #4
Dkan, Стражи включения в каждый хедер внесите.

C++
1
2
3
4
#ifndef __FILENAME_H__
#define __FILENAME_H__
//Между директивами будет ваш код.
#endif
Вместо __FILENAME_H__ соответственно название вашего хедера.
Сыроежка
Заблокирован
30.10.2011, 18:53     Наследование #5
Цитата Сообщение от ForEveR Посмотреть сообщение
Dkan, Стражи включения в каждый хедер внесите.

C++
1
2
3
4
#ifndef __FILENAME_H__
#define __FILENAME_H__
//Между директивами будет ваш код.
#endif
Вместо __FILENAME_H__ соответственно название вашего хедера.

И только не надо вначале ставить подчеркивание у ьанифестных констант, так как подчеркивание зарезервировано разработчиками компиляторов и самого стандарта языка С++ для своих нужд. То есть не следует объявлять идентификаторы, начинающиеся с подчеркивания.
Dkan
0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 31
30.10.2011, 20:23  [ТС]     Наследование #6
И еще вопрос: вызывается ли конструктор базового класса если его явно не вызывать?

В этом случае вызываем явно.
C++
1
2
3
4
5
6
7
8
9
Base( string n )
{
n = name ;
}
 
Inh( string n, int x ):Base(n)
{
y = x ;
}
А в этом?

C++
1
2
3
4
5
6
7
8
9
Base( )
{
name = "name" ;
}
 
Inh( int x )
{
y = x ;
}
При создании объекта класса Inh будет ли неявно вызван конструктор класса Base?
Yandex
Объявления
30.10.2011, 20:23     Наследование
Ответ Создать тему
Опции темы

Текущее время: 20:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru