我在程序中有一個非常簡單的文件系統。包含頭文件錯誤:多重定義
有:main.cpp中包括worker.h,worker.h和worker.cpp包括worker.h
worker.h有頭文件保護並已申報一些變量,由兩個主要求.cpp和worker.cpp,它有一些函數聲明。
#ifndef __WORKER_H_INCLUDED__
#define __WORKER_H_INCLUDED__
bool x;
int y;
void somefunction(int w, int e);
#endif
通過一些其他線程和谷歌的結果去,我理解的是,頭文件保護保護你免受多次包含在一個單一的源文件,而不是從多個源文件。
所以我可以期待鏈接錯誤。
我的問題是
爲什麼有隻變量而不是功能的多個定義錯誤?據我的理解,這些都只是聲明和未定義在頭文件worker.h
如何使一個變量可用於main.cpp和worker.cpp沒有多個定義鏈接器錯誤?
你不應該有這樣的錯誤....你是如何編譯和鏈接你的程序?你使用一些'Makefile'嗎?編譯時是否啓用了所有的警告和調試信息(例如,在Linux上用'g ++ -Wall -g'編譯)? –
@StudentX:你的理解不正確。你*聲明瞭你的函數,但是你定義了你的變量。這就是爲什麼你會得到變量的多重定義錯誤。 – AnT
@Basile Starynkevitch:他*應該*有這樣的錯誤。有些C編譯器會讓這樣的錯誤消失,但C++編譯器通常對多重定義錯誤非常嚴格。 – AnT