Error C2061 Dans visual studio
J'essaie de faire référence à une structure à partir d'une autre classe dans mon code et il me donne une erreur, me disant que j'ai un problème de syntaxe.
#pragma once
#include "Definitions.h"
#include "GV.h"
#include "UI.h"
#include "Tile.h"
#include "Item.h"
class Figure {
public:
//Figure index
struct FIGURE_TYPE {
//Where to crop the image from
SDL_Rect crop;
int x;
int y;
};
//The game figure
FIGURE_TYPE figure_index[FIGURE_COUNT];
//The figure array
int figure_array[MAP_HEIGHT / 64][MAP_WIDTH / 64];
//Functions
Figure ( void );
bool draw_figures ( SDL_Surface* screen, SDL_Surface* figures, SDL_Rect camera, Figure::FIGURE_TYPE figure_spec[FIGURE_COUNT] );
};
C'est la structure dans la Figure.h,
#pragma once
#include "Definitions.h"
#include "GV.h"
#include "Tile.h"
#include "Item.h"
#include "Figure.h"
class UI {
public:
UI ( void );
void set_camera ( SDL_Rect& camera, Figure::FIGURE_TYPE figure_spec[FIGURE_COUNT] );
bool draw_map ( SDL_Surface* screen, SDL_Rect& camera, SDL_Surface* tiles, SDL_Surface* figures, Figure::FIGURE_TYPE figure_spec[FIGURE_COUNT] );
bool draw_status ( void );
};
Et c'est là que j'référence, à partir d'un autre fichier d'en-tête de l'INTERFACE utilisateur appelé.h. Je sais qu'il ya un problème avec le référencement des structures, je ne sais pas comment le résoudre. Problème Simple, un veux de l'aide?
Le problème n'est pas que le Type de Figure est déclarée à l'extérieur de la Figure.h, ou que c'est privé, par opposition à public.
Rapports D'Erreur
Erreur 1 erreur C2653: 'Figure' : n'est pas une classe ou d'un nom d'espace de noms c:\users\jim\documents\c++\roguelike\roguelike\interface utilisateur.h 13 1 roguelike
Erreur 3 erreur C2653: 'Figure' : n'est pas une classe ou d'un nom d'espace de noms c:\users\jim\documents\c++\roguelike\roguelike\interface utilisateur.h 14 1 roguelike
Error 2 error C2061: erreur de syntaxe : identificateur 'FIGURE_TYPE' c:\users\jim\documents\c++\roguelike\roguelike\interface utilisateur.h 13 1 roguelike
Erreur 4 error C2061: erreur de syntaxe : identificateur 'FIGURE_TYPE' c:\users\jim\documents\c++\roguelike\roguelike\interface utilisateur.h 14 1 roguelike
- Que pensez-vous
Figure::
est en train de faire? Pensez-vousFigure
est un espace de noms? Un type? Ou quelque chose d'autre? (Il est difficile de corriger votre incompréhension quand je ne sais pas ce que votre raisonnement est.) - Je suis désolé, Figure.h contient une déclaration de classe appelé la la Figure. Je pensais que la Figure:: était-ce un moyen de faire référence à elle.
- Veuillez inclure la totalité du message d'erreur. Ce message est une explication de ce qu'est le mal et où.
- J'ai ajouté tout le code dont vous aurez besoin et les rapports d'erreur.
- Et bien c'est votre problème. Je ne suis pas sûr de savoir pourquoi vous avez pensé, mais c'est 100% faux. Seulement un espace de noms ou d'un type de classe va avant
::
. (D'où le message d'erreur.) Figure
est un type de classe. Vous avez tort. L'OP de la syntaxe et de la compréhension est correcte à 100%.- Ce qui devrait être utilisé par opposition à
::
? - La réponse correcte est donnée ci-dessous.
- La question a changé. Maintenant la Figure est un type de classe. Il est encore difficile de dire si sa compréhension est correcte. Il n'est pas clair s'il pense qu'il devrait utiliser
Figure::
parce que c'est le nom de la classe ou parce que c'est le nom du fichier d'en-tête. - Oh, jamais l'esprit que.
Figure.h contains a class declaration called Figure
13 minutes auparavant, deuxième commentaire. Je suis convaincu que les OP comprend son code.- Malheureusement, ils sont nécessaires pour comprendre le contexte qui est toujours d'actualité, et DONC ne me permet pas de les modifier. Je vais laisser les commentaires postérieurs clarifier les précédents.
Vous devez vous connecter pour publier un commentaire.
Vous avez une dépendance circulaire: l'INTERFACE utilisateur.h dépend de la Figure.h, et la Figure.h dépend de l'INTERFACE utilisateur.h. Vous avez besoin de rompre la dépendance circulaire en retrait de la
#include
d'un fichier dans l'autre. Dans ce cas, puisque je ne vois rien dans la Figure.h à l'aide de quoi que ce soit dans l'INTERFACE utilisateur.h, vous devez simplement supprimer le#include "UI.h"
de la Figure.h et être tous ensemble.Votre syntaxe est très bien.
Ce n'est pas bien, c'est que vous avez une dépendance circulaire entre vos en-têtes, et c'est la rupture de votre
#include
s.Dans ce cas, il est en tête à
Figure
ne pas être visible de l'intérieur "de l'INTERFACE utilisateur.h"; même si la syntaxe est correcte, ce qui provoque les erreurs que vous avez vu, parce que "l'INTERFACE utilisateur.h" n'est pas savoir que votre syntaxe est correcte, parce qu'il ne sait pas ce queFigure
est.N'ont pas de dépendances circulaires. Utilisation déclaration si possible pour vous aider.