Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> include, include 
V
    Опции темы
нуп
Дата 11.2.2010, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: нет
Всего: 33



В проекте есть много классов, как правильно их подключать в файлы? В php все инклюды собирал в 1 файл и его подключал. Но в С++ ругается на такое. Можно ли как то это реализовать? 
PM MAIL   Вверх
artsb
Дата 11.2.2010, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



Цитата(нуп @  11.2.2010,  22:01 Найти цитируемый пост)
Но в С++ ругается на такое. 

Что именно пишет?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
нуп
Дата 11.2.2010, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: нет
Всего: 33



Код

// includes.h
#include "TBaseClass.h"
#include "TSomeClass.h"
...


// TBaseClass.h

#include "includes.h"
class TSomeClass;

class TBaseClass
{
      public:
           TBaseClass();

          TSomeClass var;
};


'TBaseClass::var' uses undefined class 'TSomeClass'


PM MAIL   Вверх
artsb
Дата 11.2.2010, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



нуп, а ошибки то какие?
И сразу заметно следующее:
Код

// includes.h
#include "TBaseClass.h" // это
#include "TSomeClass.h"
...
// TBaseClass.h
#include "includes.h" // и это

замкнутое кольцо.

Добавлено через 1 минуту и 12 секунд
Т.е. вы подключаете includes.h в TBaseClass.h
А в includes.h происходит подключение TBaseClass.h
и так далее.

Добавлено через 1 минуту и 45 секунд
includes.h лучше подключать к *.cpp файлам


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
нуп
Дата 11.2.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: нет
Всего: 33



не, не, не. цикла не будет в классах стоят иф дефы.
Код

// includes.h
#include "TBaseClass.h"
#include "TSomeClass.h"
...


// TBaseClass.h

#ifdef T_BASE
#define T_BASE

#include "includes.h"

class TSomeClass;
class TBaseClass
{
      public:
           TBaseClass();
          TSomeClass var;
};

#endif


Ошибки такого плана "'TBaseClass::var' uses undefined class 'TSomeClass'"
PM MAIL   Вверх
bsa
Дата 11.2.2010, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



нуп, на самом деле не стоит делать это. Ты должен подключить #include "TSomeClass.h" напрямую. А includes.h нужно подключать только в cpp
PM   Вверх
artsb
Дата 11.2.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 4
Всего: 64



Пишет что используется неизвестный класс TSomeClass.
Пока ничего сказать не могу. Мало инфы и хрустальный шар барахлит что-то smile

Добавлено через 1 минуту и 24 секунды
Цитата(bsa @  11.2.2010,  23:03 Найти цитируемый пост)
на самом деле не стоит делать это

соглашусь с тобой. Но странно почему он так себя ведёт. ИМХО ТС что-то не договаривает.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
нуп
Дата 11.2.2010, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: нет
Всего: 33



Не знаю как правильно подключать  smile  Когда там 5-6 инклюдов, то уже теряешся. Ищу правильный способ  smile 
PM MAIL   Вверх
bsa
Дата 12.2.2010, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



нуп, в хидерах нужно подключать только то, что действительно необходимо. Потому что чем больше файлов подключено, тем дольше компилируется. Например, если у тебя в хидере используется только указатель или ссылка на объект какого-то типа, то достаточно использовать предопределение (class MyClass;). Например, у тебя в приватной области класса есть указатели на объекты типа MyClass. В реализации этого класса ты должен подключить хидер где определяется MyClass, а вот в остальных файлах, в которых используется твой класс, совсем не обязательно знать, что такое MyClass и как он устроен. Поэтому в этом случае достаточно его предопределения.

Еще существует шаблон проектирования PIMPL (Pointer to IMPLementation), он хорошо это иллюстрирует:
MyClass.h
Код
class MyClass
{
   MyClass();
   ~MyClass();
...
private:
    struct Private;
    Private *pImpl_;
};
MyClass.cpp:
Код
struct MyClass::Private
{
...
};

MyClass::MyClass() : pImpl_(new Private)
{}

MyClass::~MyClass()
{
   delete pImpl_;
}
...
Как видно, все кто подключает MyClass.h не знают, что такое Private и что у него внутри.

Это сообщение отредактировал(а) bsa - 12.2.2010, 11:33
PM   Вверх
нуп
Дата 12.2.2010, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ботокодер
**


Профиль
Группа: Участник
Сообщений: 987
Регистрация: 22.6.2009
Где: Кременчуг

Репутация: нет
Всего: 33



Спасибо за ответы
PM MAIL   Вверх
GavriKos
Дата 12.2.2010, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 8.8.2007
Где: Донецк, Украина

Репутация: 1
Всего: 1



А еще есть хорошая штука - ООП. По которой скидывать все инклуды в один файл,а потом его инклудить будет нарушением. Если правильно спланировать иерархию и прочее, то проблемы с инклудами (и, кстати большие инклуды порой тоже) пропадут.
--------------------
Донецкая группа IT - присоединяемся
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.