在C++命名空间
myspace
中,我有一个类Outer
,它又有一个内部类Inner
。虽然我可以声明和定义一个全局友元运算符QDataStream& operator<<(QDataStream& s, const myspace::Outer& o)
,但我不知道如何声明一个全局友元运算符QDataStream& operator<<(QDataStream& s, const myspace::Outer::Inner& o)
。注释掉的行表示了一个失败的尝试。我不知道如何在不定义外部类的情况下声明内部类。namespace myspace {
class Outer;
//class Outer::Inner;
}
QDataStream& operator<<(QDataStream& s, const myspace::Outer& o);
//QDataStream& operator<<(QDataStream& s, const myspace::Outer::Inner& o);
namespace myspace {
class Outer {
friend QDataStream& (::operator <<)(QDataStream&, const Outer&);
class Inner {
//friend QDataStream& (::operator <<)(QDataStream&, const Inner&);
int i;
};
int o;
};
}
我已经阅读了Namespaces and operator resolution,C++ Defining the << operator of an inner class,Accessing private class in operator<< in namespace和Operator overloading, name resolution and namespaces,但似乎都无法解决我的问题。
如果我取消注释这些行,第一行会给出错误信息“outer.h:7: error: 'Inner' in 'class myspace::Outer' does not name a type class Outer::Inner; ^",这似乎是关键。我无法声明内部类。
我正在使用C++ 11。
如果可以在没有前向引用的情况下解决问题,则此问题不是Forward declaration of nested types/classes in C++的重复问题。