Quindi ho avuto questo problema estremamente frustrante ultimamente con Visual C++ 2012. Fino a poche ore fa, stavo scrivendo il codice bene e tutto funzionava come previsto, fino a quando ha deciso di ottimizzare alcune cose e cancellato alcune classi. Ho corretto tutti gli errori che si stavano verificando a causa di ciò, ad es. false include, ecc. Sfortunatamente, dopo questo il compilatore VS è impazzito. E 'iniziato mi dà errori come ad esempio:Errore del compilatore C2653: non un nome di classe o spazio nomi
Error 14 error C2653: 'Class' : is not a class or namespace name
o anche
Error 5 error C2143: syntax error : missing ';' before '}'
Error 4 error C2059: syntax error : '>'
Ho controllato più volte, e tutto è al suo posto giusto: tutte le intestazioni inclusi, tutti i simboli posti dove dovrebbero essere .
Per quanto ho capito, il problema non è con il mio codice ma con il compilatore stesso ... Visual Studio può essere davvero fastidioso a volte, immagino. Ad ogni modo, sarei davvero grato se qualcuno potesse darmi una mano su questo.
(A proposito, invalidanti intestazioni precompilate fatto non lavoro)
parti rilevanti di codice:
errore 14:
#include "PlayerEntity.h"
PlayerEntity::PlayerEntity(void) {} // This line causes the error
Errore 5:
class GameScreen : public BaseScreen
{
public:
...
private:
...
}; // This line causes the error
Errore 4:
private:
std::vector<BaseEntity*> _EntityList; // This line causes the error
intero file PlayerEntity.h:
#ifndef PENTITY_H
#define PENTITY_H
#include "BaseEntity.h"
class PlayerEntity : public BaseEntity
{
public:
PlayerEntity(void);
PlayerEntity(float, float);
virtual ~PlayerEntity(void);
void render(sf::RenderWindow&);
void update();
private:
void init();
};
#endif
intero file GameScreen.h:
#ifndef GSCREEN_H
#define GSCREEN_H
#include "BaseScreen.h"
#include "BaseEntity.h"
#include "PlayerEntity.h"
class GameScreen : public BaseScreen
{
public:
GameScreen(sf::Vector2u&);
virtual ~GameScreen(void);
void start();
void stop();
void render(sf::RenderWindow&);
void update(void);
void addEntity(BaseEntity*);
void destoryEntity(int id);
private:
std::vector<BaseEntity*> _EntityList;
sf::Vector2u _ScreenDimensions;
};
#endif
intero file BaseEntity.h:
#ifndef BSENTITY_H
#define BSENTITY_H
#include "Input.h"
#include <SFML/Graphics.hpp>
class BaseEntity
{
public:
BaseEntity(void);
virtual ~BaseEntity(void);
sf::Vector2f position;
virtual void update(void);
virtual void render(sf::RenderWindow&);
void compare(BaseEntity*);
protected:
sf::Texture *_EntityTexture;
sf::Sprite _EntitySprite;
bool _isAlive;
int _id;
virtual void init();
};
#endif
intero file Input.h :
#ifndef INPUT_H
#define INPUT_H
#include "ScreenSystem.h"
#include <SFML/Window.hpp>
class Input
{
public:
Input(void);
Input(sf::RenderWindow*);
virtual ~Input(void);
static bool keyPressed(int);
static bool keyReleased(int);
static bool mouseHeld(int);
static bool mouseReleased(int);
private:
static sf::RenderWindow *_Window;
};
#endif
intero file ScreenSystem.h:
#ifndef GHANDLER_H
#define GHANDLER_H
#include "BaseScreen.h"
#include "MenuScreen.h"
#include "GameScreen.h"
#include <SFML/Window.hpp>
class ScreenSystem
{
public:
ScreenSystem(void);
ScreenSystem(sf::RenderWindow*);
virtual ~ScreenSystem(void);
BaseScreen *getCurrentScreen(void);
void setScreen(int);
private:
int _currentScreenID;
std::vector<BaseScreen*> _Screens;
sf::RenderWindow *_Window;
};
#endif
Dubito che sia un problema con il compilatore stesso. –
Controlla le chiusure delle dichiarazioni di classe per assicurarti che finiscano con '};' e non solo con '}'; **tutti loro**. Controlla anche il bilanciamento di ciascuna coppia '{', '}'. Poiché chiaramente il contenuto del costruttore PlayerEntity che hai fornito * dovrebbe * essere C++ valido, e poiché l'unica cosa sopra è un'intestazione include, ciò che ti fa pensare che il file include sia ** non ** rilevante e quindi non dovrebbe essere incluso qui per l'esame? – WhozCraig
Fornire un [esempio breve, autonomo e corretto] (http://sscce.org/) – Oswald