0 votes

C++ Classe lue comme variable, type par défaut int ? Comment dire ?

Donc, j'ai deux classes... La structure est très basique. J'essaie d'en importer une dans l'autre, et de déclarer un nouvel objet de ce type de classe...cependant, il semble lire le nom de la classe comme le nom d'une variable... !

La classe d'en-tête fournie ci-dessous ne lit pas correctement la classe "ApplicationManager". Code :

####ifndef _GAME_H_  
####define _GAME_H_  
####include "application.h"  
####include "applicationmanager.h"  
class Game : public Application  
{  
public:  
    Game();  
    ~Game();  
    void LoadContent() override;  
    void UnloadContent() override;  
    void Draw() override;  
private:  
    //int ApplicationManager; //WHY DOES THIS COMPILE??!  
    ApplicationManager management; //This DOES NOT WORK?  
};  
####endif

Voici l'en-tête de la classe "ApplicationManager". Code :

####ifndef _APPMANAGER_H_  
####define _APPMANAGER_H_  
####include "game.h"  
####include "application.h"  
class ApplicationManager  
{  
public:  
    ApplicationManager(void);  
    ~ApplicationManager(void);  
private:  
};  
####endif

L'erreur qui se produit m'indique qu'il faut ajouter un " ;" avant "management", et qu'il manque un spécificateur de type à "ApplicationManager", qui est donc supposé être de type int par défaut.

...une idée de la raison pour laquelle il ne compile pas correctement ? Quelqu'un d'autre peut-il essayer et rapporter les résultats ? J'ai copié le code, et je l'ai collé dans une solution différente, pour voir si quelque chose n'était pas corrompu.... mais ça ne marche toujours pas.

8voto

Paolo Capriotti Points 2874

Vous avez une référence cyclique. Quand game.h est inclus à partir de applicationmanager.h le ApplicationManager n'a pas encore été lue par le compilateur.

Pour corriger, supprimez la ligne

#include "game.h"

de applicationmanager.h .

2voto

Pavel Minaev Points 60647

Pourquoi y a-t-il une dépendance circulaire entre Game.h y AppicationManager.h ?

En dehors de cela, je dirais que vous devez vérifier votre garde d'en-tête ( #ifdef _*_H ) en Application.h . Un cas assez fréquent en C++, lors du copier/coller de code ou de la copie de fichiers, est d'oublier de changer le nom de la définition de garde d'en-tête pour une nouvelle classe, de sorte que vous vous retrouvez avec deux en-têtes différents gardés par la même définition. Dans ce cas, si les deux sont inclus dans un autre fichier, seul le premier sera réellement développé en quelque chose d'utile.

1voto

Rune FS Points 13350

Le message d'erreur est quelque peu trompeur. Il dit essentiellement "Pour une raison quelconque (probablement une erreur dans le type référencé), je ne peux pas reconnaître le type que vous utilisez (dans votre cas ApplicationManager)". Si vous avez besoin que ApplicationManager connaisse Game, créez une classe de base virtuelle pure (interface en d'autres termes) et faites en sorte que Game hérite de celle-ci (sans étendre l'interface) et faites en sorte que ApplicationManager inclue le fichier d'en-tête de la classe de base.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X