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

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

Войти
Регистрация
Восстановить пароль
 
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

Определение переменных в заголовочных файлах - C++

26.06.2015, 21:27. Просмотров 280. Ответов 2
Метки нет (Все метки)

Здорова!

Определил переменную в заголовочном фале от так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
#ifndef _imya_zagol_fayla
#define _imya_zagol_fayla
//...// текст заголовочного файла
 
#include "stdafx.h"
 
bool bThreadstop(false);
 
//Потоковая функция обычная вне класса
UINT ThreadProc(LPVOID param);
 
#endif
и выводит ошибку:
> Для всех выходных данных обновления не требуется.
1>test_timer.obj : error LNK2005: "bool bThreadstop" (?bThreadstop@@3_NA) уже определен в function.obj
1>test_timerDlg.obj : error LNK2005: "bool bThreadstop" (?bThreadstop@@3_NA) уже определен в function.obj
1>D:\Visual Studio 2010\Projects\test_timer\Debug\test_timer.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
1>


Типо множественное определение обнаружено. А че множественное если #pragma once всего раз файл подключает?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2015, 21:27     Определение переменных в заголовочных файлах
Посмотрите здесь:

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

Массивы в заголовочных файлах - C++
в заголовочном файле в описании класса пишу: int _const_iMas = {0x63,0x7c,0x78,0x79}; В итоге компилятор подчёркивает знак '='...

Линковка, реализация в заголовочных файлах - C++
Ситуация следующая. Представим себет хедер, который содержит некоторый функционал и должен использоваться в нескольких проектах. Причем ...

Объявлние классов в разных заголовочных файлах - C++
Приветствую всех участников форума. Есть 2 класса А и В. Каждый из содержит указатель на другой класс. Как сделать объявление классов в...

Статические свойства структур в заголовочных файлах - C++
Всем привет. Не могу найти в интернете инфу о том, как ведут себя статические свойства структур определённых в заголовочных файлах и...

Использование указателей на контейнеры STL в заголовочных файлах - C++
Для использования указателей на I/O классы достаточно включить <iosfwd> который содержит опережающие объявления и таким образом появляется...

Куча ошибок в заголовочных файлах,вызванных из windows.h! - C++
с чем это может быть связано? этот же код без всяких изменений уже компилировался и работал... 1> Исходный код.cpp 1>c:\program...

Литература о компиляции, линковке, что содержится в объектных файлах, стеке переменных? - C++
Здравствуйте. Подскажите, какую литературу почитать, чтобы более глубоко понимать сам процесс создания программ? Я имею в виду не...

Определение глобальных переменных - C++
Доброго времени суток! Интересует следующий вопрос - Возможно ли определение глобальных переменных в теле подпрограмм или классов? ...

Различное определение переменных - C++
Здравствуйте. Какая разница в определении переменных: int a; int b; int c; или int a, b, c;

Определение статических переменных - членов класса - C++
Доброе утро! Не могу понять, почему возникает ошибка. Есть класс в Manager.h: class Manager { public: static Manager*...

Отличие заголовочных файлов - C++
чем отличается string.h cstring string


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hoggy
6368 / 2586 / 451
Регистрация: 15.11.2014
Сообщений: 5,714
Завершенные тесты: 1
26.06.2015, 21:55     Определение переменных в заголовочных файлах #2
Цитата Сообщение от ninja2 Посмотреть сообщение
А че множественное если #pragma once всего раз файл подключает?
один раз для каждого спп файла, который к себе этот инклюд подключает.

у вас есть несколько вариантов объявить глобальную переменную.
1. в хэдере extern bool bThreadstop, а в каком то из спп файлов - инициализация.
очень плохой способ.

2. объявить статическую переменную:
C++
1
static bool bThreadstop(false);
каждая ед. трансляции получит по собственной копии переменной.

3. объявить статическое поле класса, и определить в спп файле.
это почти тоже самое, что и первый вариант.

4. объявить локальную статическую переменную:
C++
1
bool& getBool() { static bool bThreadstop(false); return bThreadstop; }
этот способ безопасен, гибок, удобен.
в общем, именно так организуют глобальные точки доступа нормальные люди.

-----------------------

ну и напоследок: поскольку у вас переменная по смыслу - флажок для треда,
используйте std::atomic<bool>.
он безопасен в многопоточной среде, в отличие от.
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.06.2015, 07:15  [ТС]     Определение переменных в заголовочных файлах #3
hoggy, не через extern лучший способ
Yandex
Объявления
27.06.2015, 07:15     Определение переменных в заголовочных файлах
Ответ Создать тему
Опции темы

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