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

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

Войти
Регистрация
Восстановить пароль
 
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 240
#1

Какая-то неопределенность при наследовании - C++

07.12.2012, 15:34. Просмотров 352. Ответов 4
Метки нет (Все метки)

Всем привет!

Прошу помощи.

Суть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//A.h
class A {
    A();
    virtual ~A();
};
 
 
//B.h
#ifndef A_H
#define A_H
class B : public A {
    B();
    ~B();
};
#endif
 
 
//C.h
#ifndef A_H
#define A_H
class C : public A {
    C();
    ~C();
};
#endif
 
 
//main.cpp
#include "A.h"
#include "B.h"
#include "C.h"
int main() {
    B *b;
    C *c; //здесь ругается: С - необъявленный идентификатор
    return 0;
}
Второй вариант main.cpp:
C++
1
2
3
4
5
6
7
8
9
//main.cpp
#include "A.h"
#include "C.h"
#include "B.h"
int main() {
    B *b; //здесь ругается: B - необъявленный идентификатор
    C *c; 
    return 0;
}
Т.е. дело - в порядке объявления хедеров.

Как можно решить эту проблему?

Спасибо за любую помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 15:34     Какая-то неопределенность при наследовании
Посмотрите здесь:

Конструкторы при наследовании - C++
Добрый вечер. Пишу программу с наследованием классов. Класс-родитель - nasled, производный от него - steck. Когда пытаюсь вызвать...

Деструктор при наследовании - C++
Имеется 3 класса (базовый -> производный -> производный2) в классе базовый имеется переменная char* var; в производном тоже есть 1...

Ошибка при наследовании - C++
Подскажите пожалуйста почему наследование класса readwrite не работает? //Программа считывает данные из файла и строит графики ...

Присвоение при наследовании - C++
Всем доброго дня ! Подскажите пожалуйста как сделать так , что-бы при выполнении операции a = c; вызывались операторы = обеих ...

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

Ошибка при наследовании класса - C++
Всем доброго времени суток, пытаюсь отнаследовать класс, вот такой код я смастерил: #ifndef CLASS_H_ #define CLASS_H_ class stack ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
07.12.2012, 15:37     Какая-то неопределенность при наследовании #2
C++
1
2
3
4
//C.h
#ifndef A_H
#define A_H
#endif
причина в этом. Макрос A_H уже был определён в файле а.h и значит всё содержимое файла с.н пропускается
либо это невнимательность. Либо ты используешь то, что не знаешь как работает. Правильно будет
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//B.h
#ifndef B_H
#define B_H
class B : public A {
    B();
    ~B();
};
#endif
 
 
//C.h
#ifndef C_H
#define C_H
class C : public A {
    C();
    ~C();
};
#endif
prazuber
109 / 109 / 3
Регистрация: 29.04.2010
Сообщений: 240
07.12.2012, 15:37     Какая-то неопределенность при наследовании #3
A.h: #ifndef A_H
A.h: #ifndef B_H
A.h: #ifndef C_H
main.cpp: достаточно инклюдить только B.h и C.h, в любом порядке
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
07.12.2012, 15:38     Какая-то неопределенность при наследовании #4
проблема не в наследовании а в припроцессинге. Вы знаете зачем вот это нужно?
C++
1
2
3
4
#ifndef A_H
#define A_H
 
#endif
этот макрос предпологает исключить переопределение какойто структуры внутри своего тела
#ifndef A_H -проверка на то что имя A_H не определено
#define A_H - определение имени, и получается у вас если менять местами имя вначале определится в В и не возможно будет зайти в тело макроса С, либо наоборот, либо уберите либо прочитайте как это работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.12.2012, 15:39     Какая-то неопределенность при наследовании
Еще ссылки по теме:

Перегрузка операторов при наследовании - C++
Есть базовый(StringType) и производный(tcomplex) классы. Соотвественно это строка и комплексное число. По заданию необходимо было создать...

Виртуальные функции при наследовании - C++
выдает ошибку на конструктор 2 класса #include <iostream> using namespace std; class A{ protected: int a; ...

Инициализация при множественном наследовании - C++
Имеется иерархия типов. Во главе: базовый класс-интерфейс, далее один базовый класс, от него два производных, а от них множественно...

Проблемы при ромбовидном наследовании - C++
У меня есть ромбовидное наследование. От Ship наследуются виртуально GuardShip и TransShip, а TransGuardShip наследуется от них. ...


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

Или воспользуйтесь поиском по форуму:
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
07.12.2012, 15:39     Какая-то неопределенность при наследовании #5
Цитата Сообщение от amfisat Посмотреть сообщение
Как можно решить эту проблему?
Её не надо было создавать.
У тебя в хедерах один и тот же символ определён через #define
C++
1
2
3
4
5
6
7
8
9
10
11
//B.h
#ifndef A_H
#define A_H
// ...
#endif
 
//C.h
#ifndef A_H
#define A_H
// ...
#endif
Вместо А_Н используй уникальные имена для каждого хэдера.
Yandex
Объявления
07.12.2012, 15:39     Какая-то неопределенность при наследовании
Ответ Создать тему
Опции темы

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