Имя: Пароль:
IT
Админ
C++. Ламерский вопрос про глобальные переменные...
0 bvn13
 
02.07.09
09:37
Чего-то я туплю совсем... :(
Есть файлы в проекте:
main.CPP - исполняемый (void main() - лежит здесь)
test.CPP - есть одна процедура
test.h - стоит #pragma once, есть одна глобальная переменная, и объявление процедуры

и в main.cpp, и в test.cpp я подключаю заголовочный файл test.h

Из main() делаю устанавливаю глобальную переменную и вызываю процедуру, объявленные в test.h...

При линковке происходит ошибка.

Error    1    error LNK2005: "int lock" (?lock@@3HA) already defined in main.obj    test.obj    main


Не могу понять, как надо правильно указать глобальную переменную, чтобы с ней работать из двух модулей... Подскажите плз...
1 Андрюха
 
02.07.09
09:40
Как объявлешь переменную?
2 ДенисЧ
 
02.07.09
09:40
Пока тест.х
3 ДенисЧ
 
02.07.09
09:40
*покажи
4 Woldemar177
 
02.07.09
09:40
Потому что ты ее пытаешься объявить два раза.
Пиши external ?
5 Salvador Limones
 
02.07.09
09:40
>>> и в main.cpp, и в test.cpp я подключаю заголовочный файл test.h
Не многовато ли?
6 Woldemar177
 
02.07.09
09:40
Глобальные переменные - ЗЛО.
7 Kraft
 
02.07.09
09:41
давай архив а почту, а то из твоего описания туго понимается...
8 Kraft
 
02.07.09
09:42
(6) +1, поэтому их убрали в C#
9 Лефмихалыч
 
02.07.09
09:42
(0) в test.* она должна быть объявлена со словом extern и вся недолга
10 bvn13
 
02.07.09
09:45
test.h
______

#pragma once




BOOL lockThread;


UINT ThreadProc(LPVOID param);  //Создание потоковой функции





test.cpp
________

#include "test.h"




UINT ThreadProc(LPVOID param)  //Создание потоковой функции
{
  ::MessageBox((HWND)param, "Thread activated","Message from Thread" ,MB_OK);
 
  while (true)
      if (!lockThread) {
          ::MessageBox((HWND)param, "Thread is work!!!","Message from Thread" ,MB_OK);//param->
          break;
      }
 
  return 0;
}




main.cpp
________

#include "test.h"

......
11 bvn13
 
02.07.09
09:46
(4), (9) пробовал, не выходит каменный цветок...
12 ДенисЧ
 
02.07.09
09:46
test.h
______

#pragma once
extern BOOL lockThread;

test.cpp
________

#include "test.h"
BOOL lockThread;
13 SnarkHunter
 
02.07.09
09:47
Вместо "Thread is work" напиши или "Thread is working" или "Thread works"...
14 bvn13
 
02.07.09
09:47
(5) а как мне в main.cpp присвоить значение этой переменной, а в test.cpp его проверять? Если подключаю в одном только месте, то ругается, что нету такой переменной...

(12) спс, ща опробую...

(13) бугага
15 bvn13
 
02.07.09
09:49
(12) СПАСИБО!!! Вроде помогло...
16 SnarkHunter
 
02.07.09
09:49
(14)"Бугага" будет когда твое сообщение увидит кто-нибудь мало-мальски владеющий английским...
17 ДенисЧ
 
02.07.09
09:50
(13) thread is work - поток - это работа....
18 bvn13
 
02.07.09
09:51
(16),(17) да ладно вам... мне пох, что он будет выводить мне... хоть на китайском...
19 SnarkHunter
 
02.07.09
09:52
(17)Интуитивно понятно сообщение...
20 SnarkHunter
 
02.07.09
09:53
(18)Пох - больно... А привычка к небрежности в коде ведёт к плачевным результатам...
21 orefkov
 
02.07.09
10:24
Писать многопоточные приложения, не зная даже отличия объявления от определения - чревато. Как и осуществлять доступ из разных потоков к глобальной переменной без использования хоть каких-то средств синхронизации.
Конечно, в случае если один поток только читает, может еще и прокатит.
Но потом привыкнешь, и амбец.
Хотя бы критическую секцию используй.
22 Ненавижу 1С
 
гуру
02.07.09
10:29
(8) не убрали а прикрыли, пожалуйста
class Global
{
 public static int MyVar;
}
23 Череп
 
модератор
02.07.09
11:20
(0) В test.h она должна быть только объявлена. Находится она должна в одном из .cpp
24 ДенисЧ
 
02.07.09
11:20
(23) Олени? :-)
25 Череп
 
модератор
02.07.09
11:39
(24) Лень читать было. В первых постах ему не ответили...
:)