Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dkan
0 / 0 / 0
Регистрация: 05.10.2011
Сообщений: 31
#1

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

30.10.2011, 18:11. Просмотров 708. Ответов 5
Метки нет (Все метки)

Создаю базовый класс:
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.

Как исправить эти ошибки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2011, 18:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наследование (C++):

Заменить наследование классов на наследование интерфейсов - C++
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...

Наследование - C++
char* Texts :: SetBit() { char a; int b; cout &lt;&lt; &quot;Получаем битовую строку&quot; &lt;&lt; endl; cin &gt;&gt; a; b = strlen(a);...

наследование - C++
Пытаюсь разобраться в наследовании Есть класс class File { public: struct comp { char num; // Имя переменной char st;...

Наследование - C++
Всем привет. Может кто нибудь подсказать с чего начать при создании класса для работы с файлами на подобии ostream( а точнее как правильно...

наследование - C++
определить базовый класс ''точка''. Затем от него определить два произвольных класса ''прямоугольник'' и ''параллелепипед'', в каждом из...

Наследование?! - C++
привет всем. Есть класс Circle c1, c2, c3 Нужно реализовать через наследование класс множество, прошу помочь как он будет выглядеть...

5
Сыроежка
Заблокирован
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 у вас включается дважды. Нужно вставитьстандартнуюзащиту от включенияз аголовока дважды, посредством объявления манифестной константны.
1
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 секунд
Это как?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
30.10.2011, 18:27 #4
Dkan, Стражи включения в каждый хедер внесите.

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

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

И только не надо вначале ставить подчеркивание у ьанифестных констант, так как подчеркивание зарезервировано разработчиками компиляторов и самого стандарта языка С++ для своих нужд. То есть не следует объявлять идентификаторы, начинающиеся с подчеркивания.
1
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?
0
30.10.2011, 20:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2011, 20:23
Привет! Вот еще темы с ответами:

наследование - C++
Как наследовать классы с использованием виртуальных функций? Можете привести пример?

наследование в С++ - C++
Добрый вечер. относительно недавно мною была получена задача, а точнее несколько задач в одной...И как это ни печально звучит, проблемы...

наследование - C++
помогите пожалуйсто дописать класс многоугольников , и рисовать на монитор с помощью mfc , заранее благодарен... class figure{ public: ...

Наследование в C++ - C++
Прошу помощи, ибо С++ не моё, а лабораторные работы девушке сдавать надо: Создать 1 базовый класс и несколько производных. Все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru