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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
ps10n1ck
 Аватар для ps10n1ck
54 / 48 / 2
Регистрация: 10.11.2010
Сообщений: 132
#1

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

10.11.2010, 17:47. Просмотров 1386. Ответов 4
Метки нет (Все метки)

Вывел часть определений переменных и т.п. в отдельный .h файл (допустим defines.h)
Описал 2 класса в файлах class1.h и class2.h. К ним подключил файл defines.h, т.к. одни и те же переменные/структуры и т.п. нужны будут в обоих файлах (классах)

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

подскажите как избавиться от этих ошибок... раньше делал как-то но уже не помню
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2010, 17:47     #include - ошибка компиляции
Посмотрите здесь:

Ошибка при добавлении #include <iostream.h> C++
C++ Ошибка компиляции
Ошибка компиляции C++
ошибка с include C++
ошибка компиляции C++
C++ С++ Ошибка компиляции
C++ создал "circle.h" файл. При компиляции Cpp файла выдаёт unable to open include file 'circle.h'
C++ Ошибка компиляции
ошибка компиляции C++
C++ Ошибка компиляции при включении #include <vector>
С++ Ошибка компиляции C++
C++ Ошибка компиляции

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
 Аватар для schdub
2916 / 1260 / 227
Регистрация: 19.01.2009
Сообщений: 3,273
Завершенные тесты: 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
54 / 48 / 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
2916 / 1260 / 227
Регистрация: 19.01.2009
Сообщений: 3,273
Завершенные тесты: 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
54 / 48 / 2
Регистрация: 10.11.2010
Сообщений: 132
10.11.2010, 22:55  [ТС]     #include - ошибка компиляции #5
все, заработало... это просто был глюк в visual studio. Просто сперва нужно было выполнить clean solution, а потом заново компилить...

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

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