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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как в объявлении класса использовать классы, которые объявлены после этого класса? 
V
    Опции темы
KaraKum
  Дата 5.6.2008, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

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



Доброе время суток.
Такая проблема: при объявлении класса используются типы других классов - когда код был ещё небольшим можно было просто-напросто переместить код объявления нужного класса (всё происходит в одном .h-файле) выше определяемого класса, но когда классы уже переплетены между собой и почти каждый имеет в себе типы других классов, то это сделать уже сложнее.
Так вот, подскажите, пожалуйста, как в объевлении класса использовать классы, которые объявлены "ниже", за исключении возможности определения класса в другом файле (в таком случае придётся возиться с десятками файлов!  smile ).
PM MAIL WWW   Вверх
ksili
Дата 5.6.2008, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

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



По-любому надо будет перелопачивать все так, чтобы все по порядку объявлялось


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Alek86
Дата 5.6.2008, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код


class C1; // объявление класса C1

class C2 {
public:
 C1 Func(); // можно объявлять (но не определять) функции, использующие тип C1;
 C1* m1;  // можно использовать указатели на тип C1
 C1& m1; // можно использовать ссылки на тип C1

 С1 m3; // ОШИБКА. Так как С1 еще не определен (хотя и объвлен), то не известен его размер
};

class C1 {/*определение класса C1*/};


Это сообщение отредактировал(а) Alek86 - 5.6.2008, 10:58


--------------------
user posted image    user posted image
PM MAIL   Вверх
KaraKum
  Дата 5.6.2008, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

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



Цитата(Alek86 @ 5.6.2008,  11:51)
Код


class C1; // объявление класса C1

class C2 {
public:
 C1 Func(); // можно объявлять (но не определять) функции, использующие тип C1;
 C1* m1;  // можно использовать указатели на тип C1
 C1& m1; // можно использовать ссылки на тип C1

 С1 m3; // ОШИБКА. Так как С1 еще не определен (хотя и объвлен), то не известен его размер
};

class C1 {/*определение класса C1*/};

Я немного неправильно выразился: я имел в виду использовать классы, которые ещё не объявлены.
По этому примеру получается так, что нужно в объявлении класса C1 ипользовать тип класса C2.
PM MAIL WWW   Вверх
mes
Дата 5.6.2008, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



реализацию выноси в cpp, в которые подключай .h
в хедерах используй предобъявление класса (forward declaration) как показал Алек86

Добавлено через 2 минуты и 40 секунд
Цитата(KaraKum @  5.6.2008,  11:11 Найти цитируемый пост)
которые ещё не объявлены.

ну так объяви заранее - всего одна строчка из двух слов

П.С.кстати объявление и описание класса - два разных понятия


--------------------
PM MAIL WWW   Вверх
Alek86
Дата 5.6.2008, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(KaraKum @  5.6.2008,  11:11 Найти цитируемый пост)
нужно в объявлении класса C1 ипользовать тип класса C2.

невозможно
в определении можно, но не в объявлении


--------------------
user posted image    user posted image
PM MAIL   Вверх
KaraKum
Дата 5.6.2008, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 640
Регистрация: 3.12.2007

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



Поместил вначале .h-файла строку с объявлением класса и всё заработало  smile .
Спасибо за помощь.

Вопрос отмечен как решённый.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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