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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.80
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
#1

Немогу объявить глобальную переменную - C++

28.01.2010, 19:20. Просмотров 2527. Ответов 13
Метки нет (Все метки)

В пустом заголовочном файле
пишу

C++
1
int some_global_variable;
и компилятор выдает ошибку

hand.obj : error LNK2005: "int some_global_variable" (?some_global_variable@@3HA) already defined in board.obj
mathematic.obj : error LNK2005: "int some_global_variable" (?some_global_variable@@3HA) already defined in board.obj
OH-DLL.obj : error LNK2005: "int some_global_variable" (?some_global_variable@@3HA) already defined in board.obj
outs.obj : error LNK2005: "int some_global_variable" (?some_global_variable@@3HA) already defined in board.obj
outs_OPP.obj : error LNK2005: "int some_global_variable" (?some_global_variable@@3HA) already defined in board.obj
ryka.obj : error LNK2005: "int some_global_variable" (?some_global_variable@@3HA) already defined in board.obj
veroiatnost.obj : error LNK2005: "int some_global_variable" (?some_global_variable@@3HA) already defined in board.obj
C:\Documents and Settings\dk\Мои документы\Visual Studio 2008\Projects\DLL\Debug\DLL.dll : fatal error LNK1169: one or more multiply defined symbols found


В чем может быть проблема ?
менял имя переменной результат тот же
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2010, 19:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Немогу объявить глобальную переменную (C++):

Как объявить глобальную переменную в Dev-C++ 4.9.9.2? - C++
Попробовал написать из справочника по С++ такую программу: #include <iostream> #include <windows.h> using namespace std; void...

Как объявить глобальную ссылку на клас с конструктором, принимающим один параметр - C++
Столкнулся с проблемой. Пытаюсь в классе №1 создать переменную класса №2, а уже потом в конструкторе класса №1 проинициализировать его, но...

Как обьявить глобальную переменную - C++
Как объявить глобальную переменную Есть несколько *CPP* и *.h* файлы. Надо объявить переменную HWND hwnd чтобы она была доступна в...

Как создать глобальную переменную? - C++
Создаю небольшой проект. Несколько функций и собственно тело программы. В теле объявил переменную int rep. Далее мне надо обратиться к ней...

Как лучше сделать глобальную переменную? - C++
Интернет совсем пустой в плане глобальных переменных на с++ Задача следующая: 1. Нужно создать много глобальных переменных будет...

Как обьявить глобальную переменную в функции? - C++
Вопрос как объявить переменную в функции чтобы ей можно было пользоваться везде?

13
Зоти Сергей
228 / 226 / 13
Регистрация: 18.12.2009
Сообщений: 316
28.01.2010, 19:40 #2
Скорей всего с #include где то напутали. Модуль сам себя видит и линкер считает, что переменные уже объявлены
1
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
28.01.2010, 19:53  [ТС] #3
Зоти Сергей,
Да удалил все инклуды оставил только в одном файле и все заработало


Теперь другая проблема хочу в одном хедере объявить глобальные переменны, а в другом хедере в теле функции присвоить им значение

Но когда так делаю мне выдает ошибку что глобальная переменная не определена
Когда объявляю и присваиваю значения в одном хедере все работает

Почему так может быть ?
разбираю один пример и там объявления и присвоение значений глобальных переменных происходит в двух разных хедерах
никаких инклудов хедеров друг на друга там нет и все работает
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.01.2010, 19:59 #4
nill, по поводу проблемы из первого поста - для заголовочных файлов всегда используй т.н. "заглушки" вида:
C++
1
2
3
4
5
6
#ifndef _FILENAME_H_
#define _FILENAME_H_
 
// Содержание заголовочного файла
 
#endif
, где FILENAME -имя заголовочного файла в верхнем регистре, пример:
C++
1
2
3
4
5
6
7
// global.h
#ifndef _GLOBAL_H_
#define _GLOBAL_H_
 
int global_variable = 0;
 
#endif //_GLOBAL_H_
Приведи, пожалуйста, содержание твоих файлов (с их именем и расширением).
0
HIMen
4144 / 1393 / 39
Регистрация: 12.04.2009
Сообщений: 2,346
28.01.2010, 20:04 #5
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
используй т.н. "заглушки" вида
а почему не pragma once ?
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
28.01.2010, 20:05  [ТС] #6
globalvars.h /// в этом файле объявляю переменные

C++
1
int some_global_variable;
general.h /// в этом файле функция в которой присваиваю значения

C++
1
2
3
4
5
6
7
8
void int_oh_symbols(){
 
 
some_global_variable=1;
 
 
        
}
в таком виде мне выдает что глобальная переменная не определена

а если все делать в фале general.h то код работает
все, всмысле объявлять и присваивать значение переменной в одном файле
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.01.2010, 20:08 #7
Цитата Сообщение от HIMen Посмотреть сообщение
а почему не pragma once ?
Потому что #pragma once не для всех компиляторов работает.
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
28.01.2010, 20:09  [ТС] #8
CyBOSSeR,
А про заглушки можно поподробней зачем они ?
а то что то мало понятной инфы по ним
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.01.2010, 20:11 #9
Цитата Сообщение от nill Посмотреть сообщение
в таком виде мне выдает что глобальная переменная не определена
А откуда компилятору знать где находится эта переменная?
Как я уже сказал, используй заглушки и подключи globalvars.h к general.h.

Кроме того заголовочные файлы не могут содержать не встроенные функции.
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
28.01.2010, 20:16  [ТС] #10
CyBOSSeR,

подключить всмысле инклуд ?
инклуд я делал не помогает
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.01.2010, 20:22 #11
nill, попробуй следующее содержание файлов:
C++
1
2
3
4
5
6
7
// globalvars.h
#ifndef _GLABALVARS_H_
#define _GLABALVARS_H_
 
int some_global_variable;
 
#endif
C++
1
2
3
4
5
6
7
8
9
10
// general.h
#ifndef _GENERAL_H_
#define _GENERAL_H_
 
#include "globalvars.h"
 
inline void int_oh_symbols(){
 some_global_variable=1;          
}
#endif
1
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
28.01.2010, 20:56  [ТС] #12
огромное спасибо все заработало

я только не пойму смысл этих #ifndef и #define для чего они ?
C++
1
2
#ifndef _GLABALVARS_H_
#define _GLABALVARS_H_
даже чуть чуть не совпадают с именем хедера а все равно работают
0
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
28.01.2010, 21:39 #13
Цитата Сообщение от nill Посмотреть сообщение
я только не пойму смысл этих #ifndef и #define для чего они ?
это стражи включения
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.01.2010, 11:36 #14
Цитата Сообщение от nill Посмотреть сообщение
я только не пойму смысл этих #ifndef и #define для чего они ?
C++
1
2
#ifndef _GLABALVARS_H_
#define _GLABALVARS_H_
Как уже сказал zim22 это стражи включения.
Если мы дважды подключим один и тот же заголовочный файл, то все его содержимое будет включено дважды, что естественно вызовет ошибки (в твоем случае, что переменная определена дважды).
Для того, чтобы избежать двойного и более включения используются стражи включения.
0
29.01.2010, 11:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2010, 11:36
Привет! Вот еще темы с ответами:

Как и где описать глобальную переменную? - C++
Как и где описать глобальную переменную? В главном класее я определяю указутель на CDaoDatabase CDaoDatabase* DBase; DBase = new...

Как правильно создать глобальную переменную? - C++
Как правильно создать глобальную переменную? Если она будет в заголовочном файле, то при подключении этого файла к другим cpp, эта...

Как сделать одну глобальную переменную - C++
Есть многофайловый проект. К примеру 5 файлов(5 "H" файлов+для них 5 "срр" файлов, пускай в каждом файле будет лежать класс) и есть...

Как глобальную переменную засунуть в структуру? - C++
#include<stdio.h> #include<malloc.h> #include<string.h> typedef struct Item { char *info; struct Item *next; ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

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