Vous ne pouvez pas l'avant-déclarer une classe imbriquée comme ça.
En fonction de ce que vous essayez de faire, peut-être vous pouvez utiliser un espace de noms plutôt que d'une classe sur la couche externe. Vous pouvez transmettre la déclaration d'une classe, pas de problème:
namespace Outer {
struct Inner;
};
Outer::Inner* sweets; // Outer::Inner is incomplete so
// I can only make a pointer to it
Si votre Extérieur doit absolument être une classe, et vous ne pouvez pas chausse-pied dans un espace de noms, alors vous aurez besoin pour l'Extérieur pour être complet type dans le contexte où vous déclarer avant Intérieure.
class Outer
{
class Inner; // Inner forward-declared
}; // Outer is fully-defined now
Outer yes; // Outer is complete, you can make instances of it
Outer::Inner* fun; // Inner is incomplete, you can only make
// pointers/references to it
class Outer::Inner
{
}; // now Inner is fully-defined too
Outer::Inner win; // Now I can make instances of Inner too