2012-05-23 26 views
0

說我有五個文件; fileA.cpp,fileA.hpp,fileB.cpp,fileB.hpp和main.cpp。這兩個頭文件定義了功能void help()。我想在main.cpp文件中使用fileA.cpp和fileB.cpp中的函數進行切換。我試過只是切換標題include,但visual studio抱怨重複的定義。爲什麼我無法在未導入的文件中重複定義?

回答

1

這是一個鏈接器錯誤。將會有一個fileB.objfileA.obj(和main.obj)鏈接在一起形成可執行文件。 fileA.objfileB.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;