之前用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