2011-11-03 147 views
1

我對Visual Studio很新,我目前正在使用多個.cpp文件的項目。基本上我想在function.cpp中的main.cpp之外創建一個函數,並且該函數應該能夠更改全局變量。然後我會在main.cpp中使用該函數。Visual Studio 2010多個cpp文件

我試着製作一個名爲globals.h的頭文件,並在其中放入靜態變量。我在main和function.cpp中包含了globals.h,並且它被編譯了,但是每當我在main函數中調用這個函數時,它什麼也不做。 當我嘗試在main.cpp中包含function.cpp時,編譯時出現多個定義錯誤。

我在做什麼錯?提前致謝!

+1

你能不能顯示一些代碼 –

回答

4

不要在頭文件中使用static變量。由於頭文件在編譯單元中是「合併」的,所以在頭文件中聲明爲static的所有變量僅在編譯單元的範圍內。您將無法在cpp文件中使用相同的全局變量。

這是你的結構應該是這樣:

globals.h 
------ 
extern int my_global_integer; 


main.cpp 
------ 
#include "globals.h" 

// here use my_global_integer; 

function.cpp 
------ 
#include "globals.h" 

// global variables have to be declared in exactly one compilation unit. 
// otherwise the linker will complain that the variable is defined twice. 
int my_global_integer = 0; 
+0

做了你所說的一切,現在它正在工作,非常感謝你:) –

+0

哇,我已經錯過了靜態這個詞。你有漂亮的眼睛。 – 6D65

0

什麼ü意味着由「試圖包括的main.cpp function.cpp」?你是否試圖在main.cpp中使用function.cpp的函數?在這種情況下,所有你需要做的就是在main.cpp文件中包含function.h。

至於錯誤部分,請確保我已經在#ifndef和#endif語法中提供了頭文件的原型和數據變量,這應該解決多重定義錯誤。

你function.h應該是什麼樣子,

的#ifndef FUNCTION_H

的#define FUNCTION_H

//變量的聲明和原型聲明放在這裏

#ENDIF

+0

請解釋如何輸入「原型」和「多重定義」等長單詞,但不能輸入諸如「你」之類的小單詞。我很好奇,因爲很多人都這樣做。 –

+0

經常發短信的習慣先生的後果.. – itsraining