test.h中:
namespace tt
{
void f();
}
test.cpp中:
#include "test.h" //可不包含test.h,编译阶段是将同一个命名空间编译到一起的。
namespace tt
{
void f()
{
}
}
main.cpp中:
#include "test.h" //必须包含,因为找不到命名空间tt。
void main()
{
tt::f();
}
static是局限于当前文件。
test.h中:
namespace tt
{
static void f();
}
test.cpp中:
namespace tt
{
static void f()
{
}
}
main.cpp中:
#include "test.h" //error C2129: 静态函数“void tt::f(void)”已声明但未定义
void main()
{
tt::f(); //error C2129: 静态函数“void tt::f(void)”已声明但未定义
}
而如果test.h中 改成:
namespace tt
{
static void f()
{}
}
则OK。
但如果test.cpp中包含test.h,则会出现重定义。因为将test.h展开到test.cpp中时,函数f()定义了两个主体。
另外:inline也是局限于当前文件,不再缀述。