我很难让我的类成为其父命名空间中模板的朋友。有人可以解释我做错了什么:
以下是我对MSVC8(Visual Studio 2005)的尝试及其错误:
namespace a {
namespace b {
template<typename T>
class x;
namespace c {
class y
{
template<typename T>
friend class x;
...
};
}
}}
错误C2888:a::b::x
:无法在命名空间c
中定义符号
namespace a {
namespace b {
template<typename T>
class x;
namespace c {
class y
{
template<typename T>
friend class ::a::b::x;
...
};
}
}}
错误C2888:a::b::x
:无法在命名空间c
中定义符号
namespace a {
namespace b {
namespace c {
class y
{
template<typename T>
friend class ::a::b::x;
...
};
}
}}
错误C2039:x
:不是a::b
我不能只包含包含class x
的标题文件,因为它取决于导致循环包含的class y
。
答案 0 :(得分:1)
黑客解决方法:如果您知道模板将被实例化的所有特定类型,请与每个实例化而不是模板建立联系。例如:
namespace a {
namespace b {
template<typename T>
class x;
namespace c {
class y
{
friend class x<char>;
friend class x<wchar_t>;
...
};
}
}}