我知道預處理器命令是頭文件的重要組成部分,可以防止多次定義變量和類。爲什麼我的C++包含多次定義變量?
我一直遇到問題,我的變量被定義多次 - 即使使用預處理器包裝。這裏是遇到編譯器錯誤的示例項目:
部首:
// TestInclude.h
#ifndef TESTINCLUDE_H_
#define TESTINCLUDE_H_
int myInt;
#endif /*TESTINCLUDE_H_*/
C++:
// TestInclude.cpp
#include <iostream>
#include "IncludeMe.h"
#include "TestInclude.h"
int main(int argc, char* args[])
{
std::cin >> myInt;
IncludeMe thisClass;
std::cin >> myInt;
}
部首:
// IncludeMe.h
#ifndef INCLUDEME_H_
#define INCLUDEME_H_
class IncludeMe
{
private:
int privateInt;
public:
IncludeMe();
};
#endif /*INCLUDEME_H_*/
C++:
// IncludeMe.cpp
#include <iostream>
#include "IncludeMe.h"
#include "TestInclude.h"
IncludeMe::IncludeMe()
{
std::cout << "myInt: " << myInt;
}
然後我編譯如下:
的Makefile:
all:
g++ -g -o TestInclude TestInclude.cpp IncludeMe.cpp
而且我得到以下錯誤:
/tmp/ccrcNqqO.o: In function `IncludeMe':
/home/quakkels/Projects/c++/TestInclude/IncludeMe.cpp:6: multiple definition of `myInt'
/tmp/ccgo6dVT.o:/home/quakkels/Projects/c++/TestInclude/TestInclude.cpp:7: first defined here
collect2: ld returned 1 exit status
make: *** [all] Error 1
爲什麼我收到的時候我使用預處理器此錯誤我的頭文件中的條件?
'extern'做什麼? – quakkels
形式上,它告訴編譯器,下面的聲明不是一個定義。簡單來說,它告訴編譯器聲明變量的定義是在其他地方,鏈接器應該解決它。 – MSalters