在C++命名空間myspace
中,我有一個類Outer
,該類又有一個內部類Inner
。儘管我可以聲明並定義全球朋友運營商QDataStream& operator<<(QDataStream& s, const myspace::Outer& o)
,但我無法看到如何聲明全球朋友運營商QDataStream& operator<<(QDataStream& s, const myspace::Outer::Inner& o)
。註釋掉的行表示嘗試失敗。我沒有看到如何在沒有定義外層的情況下聲明內層類。C++命名空間,內部類和運算符分辨率
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:錯誤:‘內’在‘類的MySpace ::外’沒有指定 型類外::內; ^ 「 這似乎是關鍵。我不能聲明內部類。
我使用C++ 11
這個問題不是Forward declaration of nested types/classes in C++重複的,如果它可以在不參考向前來解決。
你可以添加錯誤消息,當您嘗試與失敗的嘗試編譯你? – HatsuPointerKun
當第一個註釋行取消註釋時,我添加了錯誤消息。 – fundagain
你是對的,這是重複的。看來在C++中是不可能的。 – fundagain