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

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

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

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

10.11.2010, 17:47. Просмотров 1401. Ответов 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 <vector> - C++
Есть контейнер, идентичный std::vector Его код в vvector_vbase.h Если не включать в code.cpp #include &lt;vector&gt; программа...

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

ошибка в лабе не находит #include<iomanip.h> #include<conio.h> - C++
Само задание: Услуги телефонной сети оплачиваются по следующему правилу: за разговоры до A минут в месяц-C руб. а разговоры сверх...

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

ошибка с include - C++
вобщем, проблема в следующем: при компиляции выдает ошибки Unable to open include file iostream и vector, с std тоже ошибка в объявлении.....

создал "circle.h" файл. При компиляции Cpp файла выдаёт unable to open include file 'circle.h' - C++
Помогите разобраться в чём проблема? Был создан circle.h, а при компиляции cpp файла ругается. Может где путь какой нужно прописать. А...

Ошибка при добавлении #include <iostream.h> - C++
Почему при добавлении строчки #include &lt;iostream.h&gt; выдает ошибку fatal error C1083: Cannot open include file: 'iostream.h': No such...

Ошибка компиляции - C++
Помогите исправить код, а то всю голову уже сломал. #include &lt;iostream&gt; using namespace std; int main() { unsigned int fib...

Ошибка компиляции - C++
Пытаюсь &quot;испробовать&quot; код приведенный в качестве примера на одном сайте обучения С++. Выдается ошибка в помеченной строке: invalid...

Ошибка компиляции - C++
Написал код на тему шаблоны, но появились проблемы с созданием перегруженного оператора, так же не могу создать динамический массив...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
2940 / 1284 / 238
Регистрация: 19.01.2009
Сообщений: 3,357
Завершенные тесты: 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
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
2940 / 1284 / 238
Регистрация: 19.01.2009
Сообщений: 3,357
Завершенные тесты: 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
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 - ошибка компиляции
Ответ Создать тему
Опции темы

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