Dans l'espace de noms C++ myspace
, j'ai une classe Outer
qui à son tour a une classe interne Inner
. Bien que je puisse déclarer et définir un opérateur ami global QDataStream& operator<<(QDataStream& s, const myspace::Outer& o)
, je ne vois pas comment déclarer un opérateur ami global QDataStream& operator<<(QDataStream& s, const myspace::Outer::Inner& o)
. Les lignes commentées représentent une tentative ratée. Je ne vois pas comment déclarer la classe interne sans définir l'extérieur.Espaces de noms C++, classes internes et résolution de l'opérateur
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;
};
}
J'ai lu Namespaces and operator resolution, C++ Defining the << operator of an inner class, Accessing private class in operator<< in namespace et Operator overloading, name resolution and namespaces, mais aucun ne semble fonctionner.
Si je décommentez ces lignes, le premier donne le message d'erreur « outer.h: 7: Erreur: 'intérieur' dans 'myspace class :: extérieur' ne nomme pas une classe de type extérieur :: intérieur; ^ " Cela semble être la clé. Je ne peux pas déclarer la classe interne.
J'utilise 11. C++
Cette question n'est pas un double de Forward declaration of nested types/classes in C++ si elle peut peut être résolu sans référence avant.
Pouvez-vous ajouter des messages d'erreur que vous obtenez lorsque vous essayez de compiler les tentatives infructueuses? – HatsuPointerKun
J'ai ajouté le message d'erreur lorsque la première ligne commentée est décommentée. – fundagain
Vous avez raison, ceci est un doublon. Il semble que c'est impossible en C++. – fundagain