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:error:"class myspace::Outer"中的'Inner'没有命名类型 类外::内; ^" 这似乎是关键。我不能声明内部类。
我正在使用C++ 11。
这个问题不是嵌套类型/类的前向声明的副本,如果可以在没有前向引用的情况下解决C++。
鉴于时间流逝,我发布了安德烈亚斯·
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;
}
}
相关文章:
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 从内部类继承
- 如何将枚举类转发声明为模板化类的内部类?
- 从内部类中的方法从包含类调用方法
- 从模板化父类中的派生内部类访问受保护的成员变量
- C++模板类的内部类访问
- 使用类模板的内部类模板专用化模板
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- C++ 如何在外部类中声明的内部类中使用变量
- C++命名空间、内部类和运算符解析
- C++模板内部类友元运算符重载
- C++ 定义内部类的<<运算符
- 模板类复制内部类问题中的模板分配运算符
- C++ 模板运算符 + 内部类中的重载
- 模板类的内部类的运算符<<
- 在C++调用内部类成员的情况下,是否应使用此 -> 运算符?
- 内部类的不可见运算符<<重载
- 如何为内部类声明运算符<<
- 内部类模板的非成员运算符重载