Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2011, 00:37   #1
Koshmarovsky
Пользователь
 
Аватар для Koshmarovsky
 
Регистрация: 09.05.2009
Сообщений: 25
По умолчанию Заголовочные файлы + шаблонные классы

Привет!

В общем расклад такой. В программе есть некий класс A, объявленный в "a.h" и описанный в "a.cpp" и класс B, для которого аналогично созданы "b.h" и "b.cpp". Пусть одним из членов класса B является вектор элементов класса A, тогда рисуем:

Код:
//b.h
#include <vector>
using namespace std;

class B {
    private:
        vector<A> aVector;
};
Если бы в векторе хранились указатели на А, то все было бы отлично, но так как храниться будут именно элементы типа А, к моменту объявления вектора класс А должен быть так же объявлен, и обычкного
Код:
class A;
перед объявление класса В не достаточно.

Раньше я не заморачивался и просто делал
Код:
#include "a.h"
прямов в "b.h", но это как известно не айс и чревато последствиями.
Так вот. Подскажите правильный выход из данной ситуации.

Спасибо.
Иногда мне кажется, что компилятор просто игнорирует все мои комментарии. (с) Bash.org.ru

Последний раз редактировалось Koshmarovsky; 05.12.2011 в 00:39. Причина: Очепятка
Koshmarovsky вне форума Ответить с цитированием
Старый 05.12.2011, 05:27   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Koshmarovsky Посмотреть сообщение
Раньше я не заморачивался и просто делал
Код:
#include "a.h"
прямов в "b.h", но это как известно не айс и чревато последствиями.
Так вот. Подскажите правильный выход из данной ситуации.
С этого места поподробнее. Чем это чревато? Просто я всегда так делал и ничего...
pu4koff вне форума Ответить с цитированием
Старый 05.12.2011, 10:38   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,724
По умолчанию

ну если стражи не использовать, то чревато... а так
p51x вне форума Ответить с цитированием
Старый 06.12.2011, 22:25   #4
Koshmarovsky
Пользователь
 
Аватар для Koshmarovsky
 
Регистрация: 09.05.2009
Сообщений: 25
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
С этого места поподробнее. Чем это чревато? Просто я всегда так делал и ничего...
А чревато это тем, что после таких действий везде, где будет включено "b.h", будет включено и "a.h". А если "a.h" таким же образом включено еще и в "c.h", то при подключении "b.h" и "c.h" где-нибудь в "z.h", "a.h" будет подключено дважды. При таком раскладе линковщик сообщит нам об ошибке, а при некоторых менее очевидных обстоятельствах спутники в Тихий океан падают
Иногда мне кажется, что компилятор просто игнорирует все мои комментарии. (с) Bash.org.ru
Koshmarovsky вне форума Ответить с цитированием
Старый 06.12.2011, 22:29   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Koshmarovsky Посмотреть сообщение
А чревато это тем, что после таких действий везде, где будет включено "b.h", будет включено и "a.h". А если "a.h" таким же образом включено еще и в "c.h", то при подключении "b.h" и "c.h" где-нибудь в "z.h", "a.h" будет подключено дважды. При таком раскладе линковщик сообщит нам об ошибке, а при некоторых менее очевидных обстоятельствах спутники в Тихий океан падают
для этого придумали "защиту" в виде:

Код:
#ifndef _MY_HEADER_SUPER_PUPER_H
#define _MY_HEADER_SUPER_PUPER_H

// Собственно описание всех классов, функций,...
...

#endif
или банальный
Код:
#pragma once
в студии.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заголовочные файлы в Си Pirr Общие вопросы C/C++ 12 18.03.2011 00:29
Заголовочные файлы legendary Общие вопросы C/C++ 1 11.09.2010 19:41
вложенные шаблонные классы pproger Общие вопросы C/C++ 6 07.08.2010 21:20
Почему нельзя разбивать на отдельные файлы шаблонные функции и классы? lordius Visual C++ 22 08.07.2010 09:49
Заголовочные файлы. C++ Vi_King Помощь студентам 2 03.04.2008 18:47