2013-06-29 63 views
1

我有一個C++ aplication一種形式(Form1.h)和plugin.ccp文件,它是實際的應用.The程序是用於Mach3的CNC CONTROLER一個插件,其通過與CNC機牀comunicates USB。全局變量++錯誤LNK2020

我希望能在Form1.h和plugin.ccp使用的全局變量。 A試用我在這個網站上找到的解決方案。

Form1.h:

extern BOOL B1; 

Form1.ccp

#include "Form1.h" 
BOOL B1 = TRUE ; 

plugin.ccp

#include "Form1.h" 

而且能順利完成編譯。 但是,當一個類型是這樣的

Form1.h

B1 = FALSE; 
// or 
SomeOtherVar = B1; 

它給了我

 
Error 1 error LNK2020: unresolved token (0A00003B) "int mach_plugin::B1" ([email protected][email protected]@3HA) E:\mach_vmotion\Plugin.obj mach_vmotion 
Error 2 error LNK2020: unresolved token (0A00000E) "int mach_plugin::B1" ([email protected][email protected]@3HA) E:\mach_vmotion\Form1.obj mach_vmotion 
Error 3 error LNK2001: unresolved external symbol "int mach_plugin::B1" ([email protected][email protected]@3HA) E:\mach_vmotion\Form1.obj mach_vmotion 
Error 4 error LNK2001: unresolved external symbol "int mach_plugin::B1" ([email protected][email protected]@3HA) E:\mach_vmotion\Plugin.obj mach_vmotion 
Error 5 error LNK1120: 3 unresolved externals E:\mach_vmotion\Debug\mach_vmotion.dll mach_vmotion 
+2

一概而論:「全局變量是不好的」。通過不使用它們解決您的問題。 –

+0

什麼是'mach_plugin'?它看起來像你沒有發佈你的問題所需的所有上下文,例如你的聲明的封閉範圍。 –

+0

如何使用不帶全局變量的單獨線程將數據發送到USB? – Asen

回答

0

在一般情況下,不要試圖給變量的頭文件。無論您在extern BOOL B1之前還是之後(或完全刪除該行),都將無法正常工作。相反,分配B1並在他們定義(通過初始化或函數內部)SomeOtherVar

2

該錯誤消息表示您有類似:

namespace mach_plugin { 
#include "form1.h" 
} 

,而你是B1在全局範圍內定義。讓你的心屬於它的地方,並在標題一致性聲明 - 和點播,包括任何塊內的文件,namespaceextern "C",等等。

+0

甚至沒有注意到範圍問題,必須有隧道視野[或早晨太早了:]]。不過,即使這是固定的,試圖在文件範圍內分配也是行不通的。 – jerry

+0

對不起,我不確定我是否理解。是針對我還是OP? – jerry

0

內Form1.cpp。嘗試

#include "Form1.h" 
namespace mach_plugin{ 
BOOL B1 = TRUE ; 
} 

您需要額外下載代碼才能看清楚。