Подключение своих .h файлов
|
|
Morfay | Дата: Вторник, 26 Июня 2012, 17:21 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| Добрый день. Учу язык (с++) на практике - пробую писать простенький 2D движок. Уже получился довольно большой объем кода, решил его лучше организовать - выделить каждый внушительный класс (вместе с подклассами) в отдельные файлы. Дело пошло, создал пару файлов, перенес код, подключил в общей куче - работает. Но, столкнулся с проблемой:
К примеру, класс с методами отвечающими за работу с графикой у нас хранится в файле "Graphics.h". Эти самые методы нужны нам в многих местах, к примеру, отображение сцены (классы с методами в "Scene.h") - подключаем. Но если его же подключить еще в один файл (а их может быть много - работа с меню, текстом, - везде где могут понадобиться графические операции), то возникает ошибка "переопределение типа class". Реализацию таким образом подсказал друг, дружащий с php (там такой проблемы нет). Возможно стоит отказаться от .h файлов, но чем заменить? Или я что-то не учел и можно оставить как есть (естественно изменив так, чтобы работало)?
P.S. Я понимаю, что при сборке получается несколько описаний класса Graphics в общем котле, что и вызывает ошибку. Не понимаю только как можно это обойти.
|
|
| |
gansterm | Дата: Вторник, 26 Июня 2012, 17:56 | Сообщение # 2 |
частый гость
Сейчас нет на сайте
| Не надо паниковать! Просто в САМОМ начале .h файла напишите #ifndef GRAPHICS_H #define GRAPHICS_h /////////////////////// и в конце #endif
|
|
| |
Demeron | Дата: Вторник, 26 Июня 2012, 18:07 | Сообщение # 3 |
User created in C++
Сейчас нет на сайте
| Немного подправлю gansterm:
в начале: Code #ifndef GUARD_HFILE #define GUARD_HFILE Так вот, строка GUARD_HFILE в каждом .h файле должна быть разной (без разницы какой).
в конце:
|
|
| |
Morfay | Дата: Вторник, 26 Июня 2012, 18:28 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| ок, спасибо, опробую
|
|
| |
zodiak | Дата: Вторник, 26 Июня 2012, 21:30 | Сообщение # 5 |
постоянный участник
Сейчас нет на сайте
| Лучше использовать в начале файла директиву гарантирующую разовое включение файла.
Компилится быстрее, чем с ifndef, да и с именами не надо заморачиваться.
Точка зору окремо взятого індивіда завжди суб'єктивна!
Взломщик Battle City.Net
|
|
| |
Morfay | Дата: Среда, 27 Июня 2012, 09:55 | Сообщение # 6 |
почетный гость
Сейчас нет на сайте
| Quote (zodiak) Лучше использовать в начале файла директиву гарантирующую разовое включение файла.
Да, действительно помогло. Спасибо.
|
|
| |
M1ghtMortal | Дата: Среда, 27 Июня 2012, 13:24 | Сообщение # 7 |
участник
Сейчас нет на сайте
| На сколько я помню #pragma once не входит в общий стандарт и есть только в MSVC.
Java/C++/Unity(C#) Programmer. Мой блог MightMortal.RU
|
|
| |
zodiak | Дата: Среда, 27 Июня 2012, 14:00 | Сообщение # 8 |
постоянный участник
Сейчас нет на сайте
| Quote (M1ghtMortal) На сколько я помню #pragma once не входит в общий стандарт и есть только в MSVC. В стандарт вроде не входит, но есть везде. Например в линуховом gcc аж с 2004 года.
Точка зору окремо взятого індивіда завжди суб'єктивна!
Взломщик Battle City.Net
|
|
| |