![]() |
|
Модераторы: bsa |
![]()
|
|
| GrishinUS |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.9.2006 Где: Самара Репутация: нет Всего: нет |
Добрейший вечерок!
Имеется mainform.cpp mainform.h В mainform.h объявлена структура :
В теле mainform создается объект obj1.cpp в obj1.h есть
Дальше в объекте obj1 создается obj2.cpp в obj2.h есть
и т.д. Теперь вопрос : где объявлять структуру, чтобы она была доступна всем объектам (obj1, obj2, ...) Указанная мной схема не работает (что странно). |
||||||
|
|||||||
| sQu1rr |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
Может я не продвинутый програмист, но не слышал, чтобы в .cpp файле создавались объекты других .cpp файлов. Может я неправильно понял?
Если в header.h объявлена структура, и она создана и инициализирована в file.cpp, то fail2.cpp получает к ней доступ, ЕСЛИ компилируется раньше него. Так же можно использовать ключевое слово extern header.h
file1.cpp
file2.cpp
|
||||||
|
|||||||
| GrishinUS |
|
||||||||||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.9.2006 Где: Самара Репутация: нет Всего: нет |
Ну как же, такие объекты создаются, например :
Уточню вопрос. в mainwindow.h описана структура struct1
в коде можно определить переменную типа (кусок mainwindow.cpp)
более того, в заголовочном файле mainwindow.h можно добавить поле :
все скомпилируется без проблем. А вот если добавить поле типа struct1 объекту class1 то получается ошибка компиляции class1.h :
error : struct1 doesn't name a type Это сообщение отредактировал(а) GrishinUS - 24.11.2008, 15:45 |
||||||||||||||||||
|
|||||||||||||||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Возможно, у тебя просто не инклюдится mainwindow.h. Например, из-за того, что в ui_dlgClass1.h определен макрос MAINWINDOW_H.
Добавь в mainwindow.h директиву #error. Если возникнет ошибка, значит инклюидится и надо искать проблему в другом месте. |
|||
|
||||
| GrishinUS |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.9.2006 Где: Самара Репутация: нет Всего: нет |
добавил -- возникает ошибка, а значит инклюдится |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Посмотрел свежим взглядом и увидел причину. Смотри:
Начинаем парсить mainwindow.h, добавляем guard - MAINWINDOW_H, подключаем файл "class1.h", инклюдим mainwindow.h, так как MAINWINDOW_H уже определен, то заканчиваем парсинг mainwindow.h и переходим к объявлению class1... Но struct1 еще не определена, так как в первом mainwindow.h до нее еще не дошло. Итак, если хочешь чтобы все было в порядке - вынеси struct1 в отдельный хидер. Или mainwindow.h не подключай class1.h, а используй предопределение. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |