0
說我有五個文件; fileA.cpp,fileA.hpp,fileB.cpp,fileB.hpp和main.cpp。這兩個頭文件定義了功能void help()
。我想在main.cpp文件中使用fileA.cpp和fileB.cpp中的函數進行切換。我試過只是切換標題include,但visual studio抱怨重複的定義。爲什麼我無法在未導入的文件中重複定義?
說我有五個文件; fileA.cpp,fileA.hpp,fileB.cpp,fileB.hpp和main.cpp。這兩個頭文件定義了功能void help()
。我想在main.cpp文件中使用fileA.cpp和fileB.cpp中的函數進行切換。我試過只是切換標題include,但visual studio抱怨重複的定義。爲什麼我無法在未導入的文件中重複定義?
這是一個鏈接器錯誤。將會有一個fileB.obj
和fileA.obj
(和main.obj
)鏈接在一起形成可執行文件。 fileA.obj
和fileB.obj
都將包含void help()
的定義,導致多重定義錯誤。這與更改main.cpp
中的include指令無關。
推薦在一個namespace
包圍void help()
:
fileA.hpp:
namespace filea
{
void help();
}
fileA.cpp:
namespace filea
{
void help()
{
// implementation
}
}
fileB.hpp:
namespace fileb
{
void help();
}
fileB.cpp:
namespace fileb
{
void help()
{
// implementation
}
}
main.cpp中:
#include <fileA.hpp>
using filea::help;
//#include <fileB.hpp>
//using fileb::help;