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

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

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

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

26.06.2015, 21:27. Просмотров 259. Ответов 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++ Объявлние классов в разных заголовочных файлах
C++ Массивы в заголовочных файлах
Определение статических переменных - членов класса C++
C++ О стандартных заголовочных файлах
C++ Статические свойства структур в заголовочных файлах
Иерархия заголовочных файлов C++
C++ Литература о компиляции, линковке, что содержится в объектных файлах, стеке переменных?
Определение глобальных переменных C++
C++ Различное определение переменных
Линковка, реализация в заголовочных файлах C++
C++ Куча ошибок в заголовочных файлах,вызванных из windows.h!

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hoggy
5988 / 2428 / 436
Регистрация: 15.11.2014
Сообщений: 5,380
Завершенные тесты: 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     Определение переменных в заголовочных файлах
Ответ Создать тему
Опции темы

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