|
|
|
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) Лень читать было. В первых постах ему не ответили...
:) |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |