在.hpp中的匿名命名空间中定义函数签名时,将该函数的实现放在.cpp中是否有效?当我这样做时,我得到一个未定义的引用错误。
示例:
//hpp
#ifndef __BAR_HPP_
#define __BAR_HPP_
namespace foo
{
namespace
{
struct Bar
{
void func();
};
}
}
#endif
//cpp
using foo;
void Bar::func()
{
//...
}
答案 0 :(得分:5)
想一想:
namespace foo
{
struct Bar
{
void func();
};
}
void Bar::func() { /*impl...*/ }
您的代码不起作用的原因与此代码没有相同的原因 - 定义是在错误的范围内提供的。我们需要的是:
void foo::Bar::func() { /*impl...*/ }
但是你用什么来代替foo::
来引用匿名命名空间的名称?它没有。
底线:无法在匿名命名空间内声明某些内容,然后在其他位置定义它,因为没有用于指定正确范围的机制。