Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
56 / 50 / 11
Регистрация: 10.11.2010
Сообщений: 132
1

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

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

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

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

подскажите как избавиться от этих ошибок... раньше делал как-то но уже не помню
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.11.2010, 17:47
Ответы с готовыми решениями:

Ошибка компиляции при включении #include <vector>
Есть контейнер, идентичный std::vector Его код в vvector_vbase.h Если не включать в code.cpp ...

Работа с файлами в C# с исп. библиотек #include <stdio.h> #include <stdlib.h> #include <math.h> #include <io.h>
В типизированном файле записаны названия городов и их численность. Увеличить численность каждого...

#include<iostream>// подключение библиотек #include <conio.h> #include <climits>
помогите для этой программы сделать блок-схему. Пожалуйста #include&lt;iostream&gt;// подключение...

Ошибка при компиляции программы "fatal error A1000: cannot open file : /masm32/include/windows.inc"
.486 .model flat, stdcall include /masm32/include/windows.inc include /masm32/include/user32.inc...

4
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
10.11.2010, 18:26 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;
Но следует отметить, что программировать на С++ следует так, чтобы свести количество глобальных переменных к минимуму, а лучше, чтобы их вообще не было.
0
56 / 50 / 11
Регистрация: 10.11.2010
Сообщений: 132
10.11.2010, 18:41  [ТС] 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
0
Эксперт С++
3071 / 1409 / 425
Регистрация: 19.01.2009
Сообщений: 3,880
10.11.2010, 19:17 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;
1
56 / 50 / 11
Регистрация: 10.11.2010
Сообщений: 132
10.11.2010, 22:55  [ТС] 5
все, заработало... это просто был глюк в visual studio. Просто сперва нужно было выполнить clean solution, а потом заново компилить...

спасибо Oleg
0
10.11.2010, 22:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.11.2010, 22:55
Помогаю со студенческими работами здесь

Ошибка в CodeVisionAVR по #include<avr/io.h> #include<avr/interrupt.h>
Библиотеки #include&lt;avr/io.h&gt; и #include&lt;avr/interrupt.h&gt; - они вообще из какой IDE? Нашел код...

Чем отличается #include <cstring>, #include <string> и #include <string.h>?
Доброго времени суток :) Пишу свой класс и мне для нужны функции для работы со строками. Когда...

include ошибка
При создании своего сайта на локальном сервере, я вызывал дополнительные фрагменты кода через &lt;?php...

Ошибка #include
Есть две формы (одна основная, вторая диалоговая) Вот начало основной: #pragma once #include...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru