** ariks |
Отправлено: 26.04.2004, 10:47 |
|
Не зарегистрирован
|
Будте добры, подскажите как правильно воспользоваться диррективой #include.
Я чего то не допонимаю. Компилятор постоянно ругается то он такой то класс не видит, то такой то.
А я уже всё что можно инклайдами и предварительными объявлениями утыкал, а не помогает .
//---------------------------------------------
// AppController.h
class AppController /* центральный объект. создаёт остальные модули. предоставляет интерфейс для межмодульного взаимодействия. */
{
WndController mWndCtrl; // оконный менеджер
};
extern AppController & theApp; // глобальная ссылка на единственный объект контроллера приложения
class View // абстрактный базовый класс представления (вида)
{
public:
virtual View* Make()=0;
};
// end AppController.h
//---------------------------------------------
// WndCtrllr.h
class WndController
{
MainView mMainView;
};
// end WndCtrllr.h
//---------------------------------------------
// MainForm.h
class TMainForm // главное окно(форма)
{
IMainView *mIMainView;
};
class MainView : public View /* главное представление (только через него можно обращаться к гл.форме */
{
TMainForm *mMainForm;
};
class IMainView /* УмныйУ казатель (интерфейс) на гл.вид*/
{
MainView *mMainView;
};
// end MainForm.h
//---------------------------------------------
//есть ещё WinMain
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
Application->Initialize();
theApp.InitInstance();
Application->Run();
return 0;
} |
|
olegenty |
Отправлено: 26.04.2004, 12:14 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
инклуды-то приведи...
|
|
Deem |
Отправлено: 29.04.2004, 09:49 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
Знаешь, что скобки <...> и "..." различаются?
Знаешь, что .h файлы надо на всякий случай обрамлять условной компиляцией #ifndef ... #endif ? После такого обрамления .h — файл можно инклюдить куда угодно и сколько угодно раз. Препроцессор вставит его текст в cpp только один ПЕРВЫЙ раз.
Знаешь, что любой идентификатор можно использовать в модуле только после его описания? А порядок следования инклюдов может приводить к ошибке?
|
|
olegenty |
Отправлено: 30.04.2004, 07:10 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Не-а, не знает, потому что иначе не было бы вопроса
|
|
ariks |
Отправлено: 07.05.2004, 23:52 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
Да знаю я всё это (хотя про важность порядка инклайда лишь догадывался)
вообще получается просто циклеческая ссылка.
в 1м h файле в классах есть члены из 2h файла и наоборот.
А ещё есть другие h файлы.. которым надо видеть интерфейсы первых.
получается каша... А у Страуструпа не достатоно подробно это описано.
Вот попробую даже исходники приклеить сюда.
|
|
Deem |
Отправлено: 11.05.2004, 15:09 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
Да, бывает кашка. Тут надо продумывать последовательность. Но при использовании условной компиляции можно вставлять inclide в другие .h, если они там нужны. И в другие места — тоже можно вставлять. Компилятор пущай разбирается.
А как хорошо в DELPHI! Скорость компиляции офигенная. Глазом не моргнешь, а уже откомпилил все. Я немного даже терялся. Компилил по несколько раз для верности.
Кстати, классы, как и функции, можно описывать до определения.
class TYearRpt;
class My
{
TYearRpt* Y; // На такое поле компилер не матючится
void Do () { Y->Do(); } /* А на такую функцию матючится, т.к. класс еще не определен*/
};
class TYearRpt : public TForm
{
public:
void Do(){};
};
Короче, тут есть о чем поразмыслить. Кого, куда и за кем вставлять.
|
|