//Test.h
namespace Test
{
class CTest
{
public:
void Fun();
};
CTest& theTest();
}
//Test.cpp
#include "Test.h"
using namespace Test;
CTest& theTest()
{
static CTest test;
return test;
}
void CTest::Fun()
{
}
int main()
{
theTest().Fun();
}
//错误C2668,对函数调用产生二义性
这是因为编译器把头文件中theTest中的声明当做是属于命名空间Test中的,而看到源文件中的theTest的定义,就把它作为全局的,所以当调用theTest函数的时候编译器就不知道到底是调用名字空间Test中的theTest还是调用全局中的theTest。