Суббота, 23 Ноября 2024, 03:05

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Подключение своих .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 файле должна быть разной (без разницы какой).

в конце:
Code
#endif
MorfayДата: Вторник, 26 Июня 2012, 18:28 | Сообщение # 4
почетный гость
Сейчас нет на сайте
ок, спасибо, опробую
zodiakДата: Вторник, 26 Июня 2012, 21:30 | Сообщение # 5
постоянный участник
Сейчас нет на сайте
Лучше использовать в начале файла директиву
Code
#pragma once

гарантирующую разовое включение файла.

Компилится быстрее, чем с ifndef, да и с именами не надо заморачиваться.


Точка зору окремо взятого індивіда завжди суб'єктивна!

Взломщик
Battle City.Net
MorfayДата: Среда, 27 Июня 2012, 09:55 | Сообщение # 6
почетный гость
Сейчас нет на сайте
Quote (zodiak)
Лучше использовать в начале файла директиву

Code
#pragma once


гарантирующую разовое включение файла.


Да, действительно помогло. Спасибо.
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
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг