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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00
Oskard
0 / 0 / 0
Регистрация: 25.01.2013
Сообщений: 4
#1

Взаимные include заголовочных файлов - C++

25.01.2013, 00:20. Просмотров 1183. Ответов 9
Метки нет (Все метки)

Доброго времени суток!

Возник вопрос по вот такой задаче: Пускай есть файлы A.h , A.cpp, B.h, B.cpp. В файле A.h объявлен класс А:
C++
1
2
3
4
5
6
7
8
class A
{
   ...
   B** Arr;
public:
   void someMethod();
   ...
};
В файле B.h класс B:

C++
1
2
3
4
5
6
class B
{
   ...
   friend void A::someMethod(); // Необходимо менять внутренние поля класса B из метода класса А
   ...
};
В файлах .cpp содержатся, соответственно, реализации классов A и B.

Как всю эту прелесть собрать теперь? Ставя #include соответствующих файлов, компилятор попытается включить каждый из .h файлов в каждый другой раньше использования определений, и уходит в бесконечность(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2013, 00:20     Взаимные include заголовочных файлов
Посмотрите здесь:

Иерархия заголовочных файлов - C++
Вопрос такой. Есть 2 заголовочных файла с классами: core.h interface.h В core.h происходит #include interface.h В...

Объявление заголовочных файлов - C++
Скажите в чем разница между объявлением вида: #include <iostream> и вида #include "iostream"

Отличие заголовочных файлов - C++
чем отличается string.h cstring string

Назначение заголовочных файлов - C++
Я читала учебник и википедию - никак не доходит. В общем, может я неправильно поняла: есть у меня "Моя программа.cpp", и есть...

Правильное подключение заголовочных файлов - C++
Всем привет!!!Начал разбираться с ООП , и ... тут же возникла проблема. Пишу программу следующую есть два класса футболист и команда и...

Перекрёстное подключение заголовочных файлов - C++
Здоровеньки булы. Есть 2 класса, каждый в своём хедере. В классе А есть экземпляр (не указатель) класса В и наоборот. Как организовать...

Перекрестное подключение заголовочных файлов - C++
Пишу программу и появилась необходимость подключать в двух модулях заголовочные файлы один одного, при этом один из хедеров не...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
25.01.2013, 00:44     Взаимные include заголовочных файлов #2
Include guard
C++
1
2
3
4
#ifndef A_CLASS_H
#define A_CLASS_H
//код A
#endif
C++
1
2
3
4
#ifndef B_CLASS_H
#define B_CLASS_H
//код B
#endif
также можно
C++
1
#pragma once
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84
25.01.2013, 00:44     Взаимные include заголовочных файлов #3
Код в хэдерах запихнуть в такое (для каждого хэдера свое имя LOL):
C++
1
2
3
4
#ifndef LOL
#define LOL
//код
#endif
Можно также попробовать написать 1вой строкой в каждом хэдере:
C++
1
#pragma once
Oskard
0 / 0 / 0
Регистрация: 25.01.2013
Сообщений: 4
25.01.2013, 00:51  [ТС]     Взаимные include заголовочных файлов #4
Shandr_71, Croessmah,

Беда в том, что так пробовал - не работает. В B.h пишет, что мол error C2653: 'A' : is not a class or namespace name,
а в A.h что error C2061: syntax error : identifier 'B'
gray_fox
What a waste!
1440 / 1169 / 61
Регистрация: 21.04.2012
Сообщений: 2,439
Завершенные тесты: 3
25.01.2013, 00:58     Взаимные include заголовочных файлов #5
Oskard, Forward declaration пробовали?
C++
1
2
3
4
5
6
7
8
class B;
 
class A {
  
   // ...
   
   B ** b;
};
C++
1
2
3
4
5
6
7
#include "A.h"
 
class B {
 
   // ...
 
};
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 3
Завершенные тесты: 1
25.01.2013, 00:59     Взаимные include заголовочных файлов #6
Цитата Сообщение от Oskard Посмотреть сообщение
Беда в том, что так пробовал - не работает. В B.h пишет, что мол error C2653: 'A' : is not a class or namespace name,
а в A.h что error C2061: syntax error : identifier 'B'
перед объявлением A поставьте
C++
1
class B;
перед объявлением B:
C++
1
class A;
Oskard
0 / 0 / 0
Регистрация: 25.01.2013
Сообщений: 4
25.01.2013, 01:07  [ТС]     Взаимные include заголовочных файлов #7
gray_fox, пробовал, заголовки собираются, но в реализации (.cpp файле A.cpp) в методах, использующих B** b, выдаётся ошибка: pointer to incomplete class type not allowed.
gray_fox
What a waste!
1440 / 1169 / 61
Регистрация: 21.04.2012
Сообщений: 2,439
Завершенные тесты: 3
25.01.2013, 01:09     Взаимные include заголовочных файлов #8
Oskard, включить B.h в A.cpp?
Oskard
0 / 0 / 0
Регистрация: 25.01.2013
Сообщений: 4
25.01.2013, 01:15  [ТС]     Взаимные include заголовочных файлов #9
gray_fox, да, это включение, при обёртке в Include guard заголовка класса A, помогло - программа собралась.


Спасибо всем!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2013, 01:17     Взаимные include заголовочных файлов
Еще ссылки по теме:

Правильное подключение заголовочных файлов - C++
Как подключать заголовочные файлы я знаю, но вот у меня есть вопрос, ответ на который я нигде не видел, не видел даже рекомендаций как...

Создание и использование заголовочных файлов - C++
Здравствуйте! Хочу создать заголовочный файл и засунуть туда объявления функций. Так он выглядит #ifndef LONGNUM_H_INCLUDED #define...

Контроль включаемых заголовочных файлов - C++
Всем привет! У меня родился следующий вопрос: как можно сделать так, чтобы подключаемый файл, при условии, что он уже был ранее...

Включение заголовочных файлов дважды - C++
Как справится с тем, что некоторые файлы .h надо включить несколько раз, т.е. помимо main.cpp, еще и в других заголовочных файлах?...

Взаимное включение заголовочных файлов - C++
Нужно передать объект по ссылке Вот как сейчас: //LoadImages.h class LoadImages { ttfInit(); }; //LoadImages.cpp ...


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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
1440 / 1169 / 61
Регистрация: 21.04.2012
Сообщений: 2,439
Завершенные тесты: 3
25.01.2013, 01:17     Взаимные include заголовочных файлов #10
Цитата Сообщение от Oskard Посмотреть сообщение
при обёртке в Include guard заголовка класса A
Оборачивайте в них все заголовочные файлы.
Yandex
Объявления
25.01.2013, 01:17     Взаимные include заголовочных файлов
Ответ Создать тему
Опции темы

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