範例:
main.cpp
file_1.cpp
file_1.cpp
global.h中寫有所有的全局變量及其初始化值和函數聲明
在編譯的時候就會出錯: first defined here multiple definition of
原因是因為在多次包含global.h時重複定義了變量和函數。
解決方法:
方法一:
在global.c(或.cpp) 中聲明變量(不初始化),然後頭文件global.h中在所有的變量聲明前加上extern 如 extern int flag; 然後在其他需要使用全局變量的cpp文件中包含.h 文件而不要包含.cpp 文件。編譯器會為global.cpp 生成目標文件,然後連接時,在使用全局變量的文件中就會連接到此文件。
範例:
Declare.h:
subprog.cpp:
main.cpp
#include "global.h"
int Main(....) { ... }
file_1.cpp
#include "global.h" ....
file_1.cpp
#include "global.h"
global.h中寫有所有的全局變量及其初始化值和函數聲明
在編譯的時候就會出錯: first defined here multiple definition of
原因是因為在多次包含global.h時重複定義了變量和函數。
解決方法:
方法一:
在global.c(或.cpp) 中聲明變量(不初始化),然後頭文件global.h中在所有的變量聲明前加上extern 如 extern int flag; 然後在其他需要使用全局變量的cpp文件中包含.h 文件而不要包含.cpp 文件。編譯器會為global.cpp 生成目標文件,然後連接時,在使用全局變量的文件中就會連接到此文件。
範例:
Declare.h:
#ifndef DECLARE_H #define DECLARE_H extern const char *COMP; #endif
subprog.cpp:
#include
#include "Declare.h"
const char *COMP="macromedia";
void ShowComp() {
std::cout << COMP << std::endl;
}
main.cpp:
#include "Declare.h"
extern void ShowComp();
int main(int agrc, char *argv[]) {
ShowComp();
return 0;
}
方法二:
在global.h中加入防止多次重複定義的宏判斷符號 你的.H裡面要加上條件編譯
#ifndef GLOBAL
#define GLOBAL XXXXX XXXXX
......................
#endif
記住:在ifndef時一定要在第一行,前邊不要有任何的註釋或語句。










