Форум программистов, компьютерный форум CyberForum.ru

#include - ошибка компиляции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
ps10n1ck
 Аватар для ps10n1ck
53 / 47 / 2
Регистрация: 10.11.2010
Сообщений: 132
10.11.2010, 17:47     #include - ошибка компиляции #1
Вывел часть определений переменных и т.п. в отдельный .h файл (допустим defines.h)
Описал 2 класса в файлах class1.h и class2.h. К ним подключил файл defines.h, т.к. одни и те же переменные/структуры и т.п. нужны будут в обоих файлах (классах)

При компиляции выдает ошибку
error LNK2005: "struct .......... already defined in defines.obj"
Это и понятно, т.к. получается при каждом подключении defines.h определяются переменные/структуры.

подскажите как избавиться от этих ошибок... раньше делал как-то но уже не помню
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,214
Завершенные тесты: 1
10.11.2010, 18:26     #include - ошибка компиляции #2
Модифицируем файл defines.h таким образом:
C++
1
2
3
4
5
6
7
#ifndef DEFINES_H_
#define DEFINES_H_
 
// декларация структур
// декларация классов
 
#endif  // DEFINES_H_
Добавлено через 7 минут
Цитата Сообщение от ps10n1ck Посмотреть сообщение
определяются переменные
С глобальными переменными все несколько иначе:

Допустим в class1.h за декларирована глобальная переменная int globVal и она должна шариться в других модулях программы, тогда в defines.h объявляем ее с квалификатаром extern т.е.:
C++
1
extern int globVal;
Но следует отметить, что программировать на С++ следует так, чтобы свести количество глобальных переменных к минимуму, а лучше, чтобы их вообще не было.
ps10n1ck
 Аватар для ps10n1ck
53 / 47 / 2
Регистрация: 10.11.2010
Сообщений: 132
10.11.2010, 18:41  [ТС]     #include - ошибка компиляции #3
ну раньше я вроде так и делал...

но сейчас это не помогает почему-то... все равно выдает ту же ошибку.

фот к примеру часть кода defines.h
Код
#ifndef DEFINES_H_
#define DEFINES_H_

#define WIN32_LEAN_AND_MEAN
#define _CRT_SECURE_NO_DEPRECATE

#include <windows.h>
#include <d3d9.h>

#pragma comment(lib,"d3d9.lib")

LPDIRECT3D9 pDirect3D                = NULL;
LPDIRECT3DDEVICE9 pDirect3DDevice    = NULL;

#endif  // DEFINES_H_
этот файл подключается к файлам class.Move.h и class.Mesh.h
а class.Move.h подключается к main.cpp

pDirect3DDevice к примеру используется в файлах class.Move.h и class.Mesh.h

при компиляции ошибка выдается:
1>class.Move.obj : error LNK2005: "struct IDirect3DDevice9 * pDirect3DDevice" (?pDirect3DDevice@@3PAUIDirect3DDevice9@@A) already defined in main.obj
1>class.Move.obj : error LNK2005: "struct IDirect3D9 * pDirect3D" (?pDirect3D@@3PAUIDirect3D9@@A) already defined in main.obj
1>class.Mesh.obj : error LNK2005: "struct IDirect3D9 * pDirect3D" (?pDirect3D@@3PAUIDirect3D9@@A) already defined in main.obj
1>class.Mesh.obj : error LNK2005: "struct IDirect3DDevice9 * pDirect3DDevice" (?pDirect3DDevice@@3PAUIDirect3DDevice9@@A) already defined in main.obj
schdub
 Аватар для schdub
2902 / 1246 / 222
Регистрация: 19.01.2009
Сообщений: 3,214
Завершенные тесты: 1
10.11.2010, 19:17     #include - ошибка компиляции #4
Цитата Сообщение от ps10n1ck Посмотреть сообщение
LPDIRECT3D9 pDirect3D = NULL;
LPDIRECT3DDEVICE9 pDirect3DDevice = NULL;
ну вот же из-за этого

в main.cpp объявляйте эти указатели
C++
1
2
LPDIRECT3D9 pDirect3D = NULL;
LPDIRECT3DDEVICE9 pDirect3DDevice = NULL;
а в defines.h объявляете их как extern
C++
1
2
extern LPDIRECT3D9 pDirect3D;
extern LPDIRECT3DDEVICE9 pDirect3DDevice;
ps10n1ck
 Аватар для ps10n1ck
53 / 47 / 2
Регистрация: 10.11.2010
Сообщений: 132
10.11.2010, 22:55  [ТС]     #include - ошибка компиляции #5
все, заработало... это просто был глюк в visual studio. Просто сперва нужно было выполнить clean solution, а потом заново компилить...

спасибо Oleg
Yandex
Объявления
10.11.2010, 22:55     #include - ошибка компиляции
Ответ Создать тему
Опции темы

Текущее время: 00:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru