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

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

Восстановить пароль Регистрация
 
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
26.06.2015, 21:27     Определение переменных в заголовочных файлах #1
Здорова!

Определил переменную в заголовочном фале от так
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++ массивы в заголовочных файлах
C++ Объявление заголовочных файлов
Подключение заголовочных файлов C++
Определение статических переменных - членов класса C++
C++ О стандартных заголовочных файлах
C++ Статические свойства структур в заголовочных файлах
Иерархия заголовочных файлов C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hoggy
5230 / 2121 / 404
Регистрация: 15.11.2014
Сообщений: 4,812
Завершенные тесты: 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
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.06.2015, 07:15  [ТС]     Определение переменных в заголовочных файлах #3
hoggy, не через extern лучший способ
Yandex
Объявления
27.06.2015, 07:15     Определение переменных в заголовочных файлах
Ответ Создать тему
Опции темы

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