为什么我不能在未导入的文件中有重复的定义?

时间:2012-05-23 07:52:16

标签: visual-studio-2010

说我有五个文件; fileA.cpp,fileA.hpp,fileB.cpp,fileB.hpp和main.cpp。两个头文件都定义了函数void help()。我想在main.cpp文件中使用fileA.cpp中的函数和fileB.cpp之间切换。我尝试过切换标题包括,但是visual studio抱怨重复的定义。

1 个答案:

答案 0 :(得分:1)

这是一个链接器错误。将fileB.objfileA.obj(和main.obj)链接在一起以形成可执行文件。 fileA.objfileB.obj都会包含void help()的定义,从而导致多个定义错误。它与更改main.cpp中的include指令无关。

建议将void help()括在namespace

<强> 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;