gpt4 book ai didi

C++ 命名空间、内部类和运算符解析

转载 作者:太空狗 更新时间:2023-10-29 23:12:35 25 4
gpt4 key购买 nike

在 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 namespaceOperator overloading, name resolution and namespaces , 但似乎都不起作用。

如果我取消注释这些行,第一行会给出错误消息“outer.h:7: error: 'Inner' in 'class myspace::Outer' does not name a type 类外层::内层; ^"这似乎是关键。我不能声明内部类。

我正在使用 C++ 11。

这个问题不是 Forward declaration of nested types/classes in 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;
}
}

关于C++ 命名空间、内部类和运算符解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45335075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com