c++关于namespace的**.obj **** already defined in ***.obj问题

之前用namespace很多,不过内部都包含了class,函数和变量都是在类中,因此也没遇到过这个问题,昨天不想再包含类了,于是直接在写为

//CommonUse.h

#pragma once

#include "XXXX"

namespace CommUse

{

std::string valueToString(unsigned int nValue)

{
char szChar[15];
sprintf(szChar, "%l", nValue);
return szChar;
}

}

在两个不同的.cpp文件中使用了valueToString函数,结果编译链接阶段就出现了题中的错误,今天来了搜了一下,看了其他人说的解决方案,修改为

//CommonUse.h

#pragma once

#include "XXXX"


namespace CComUse
{
std::string valueToString(unsigned int nValue);

}

//CommonUse.cpp

#include "CommonUse.h"

namespace CComUse
{
std::string valueToString(unsigned int nValue)
{
char szChar[15];
sprintf(szChar, "%l", nValue);
return szChar;
}
}

然后就OK了。

错误原因:程序包含了两个相同的定义,即重定义,然而只能定义唯一的一个,因此可以在.h中只包含函数或者变量声明,在source文件中进行定义。

http://stackoverflow.com/questions/6109224/c-namespace-member-access-in-different-files-how-to-how-namespace-std-imple

原文地址:https://www.cnblogs.com/playerboy/p/3867309.html