2015-04-17 1 views
0

Je reçois le code d'erreur C2512 qui n'est pas un constructeur par défaut approprié disponible. Cependant, il me semble que tout devrait fonctionner, donc je suis un peu confus sur la façon de compiler.Comment utiliser correctement une classe déclarée en avant dans C++ cli?

Voici le code du fichier d'en-tête:

namespace MyNamespace 
{ 
    ref class ForwadDeclaredClass; 

    public ref class MyClass 
    { 
     public: 
     MyClass(); 
     // ... 
     private: 
     ForwadDeclaredClass^ fc; 
    } 
} 

Maintenant, dans mon fichier cpp je définir la classe et transmise essayez de l'utiliser dans le constructeur de MaClasse. Je sais qu'il me manque quelque chose de simple mais je ne le vois tout simplement pas. Toute aide serait appréciée.

Répondre

2

À première vue, il semble que vos espaces de noms soient désactivés.

Dans le fichier d'en-tête, vous déclarez ForwardDeclaredClass et MyClass à l'intérieur de MyNamespace.

Dans le fichier cpp, vous êtes à l'aideMyNamespace, mais le code que vous écrivez n'est pas à l'intérieur l'espace de noms.

Il semble que vous ayez besoin de placer la plus grande partie du contenu du fichier cpp dans un bloc namespace MyNamespace {.

+1

Pas * la plus * du code, mais juste la définition de 'ForwardDeclaredClass'. La déclaration forward est faite pour MyNamespace :: ForwardDeclaredClass parce que la ligne 'ref class ForwadDeclaredClass;' est dans l'espace de nommage, mais la définition est pour ':: ForwardDeclaredClass' (c'est en dehors de l'espace de noms). Pas besoin d'envelopper la définition 'MyClass :: MyClass()' dans un bloc 'namespace' -' using namespace MyNamespace; 'est là en effet. –