簡體   English   中英

C ++名稱空間,內部類和運算符解析

[英]C++ namespaces, inner classes and operator resolution

在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;
    };

}

我已經閱讀了命名空間和運算符解析C ++定義內部類的<<運算符, 在運算符<<中訪問私有類的名稱空間運算符重載,名稱解析和名稱空間 ,但似乎沒有工作。

如果我取消注釋這些行,第一行給出錯誤消息“outer.h:7:錯誤:'內部'在'類myspace :: Outer'中沒有命名類型類Outer :: Inner; ^”這似乎是鍵。 我無法宣布內部階級。

我正在使用C ++ 11。

如果可以在沒有前向引用的情況下解決,那么這個問題不是C ++中嵌套類型/類前向聲明的重復。

鑒於時間流逝,我發布了Andreas H.給出的正確答案。

namespace myspace {
class Outer {
    class Inner {
        friend QDataStream& operator<<(QDataStream&, const Inner&);
        int i;
    };
    friend QDataStream& operator<<(QDataStream&, const Outer&);
    friend QDataStream& operator<<(QDataStream&, const Inner&);
    int o;
};
QDataStream& operator<<(QDataStream& s, const myspace::Outer& o) {
    s << o.o;
    return s;
}
QDataStream& operator<<(QDataStream& s, const myspace::Outer::Inner& i) {
    s << i.i;
    return s;
}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM