So hatte ich in letzter Zeit mit Visual C++ 2012 dieses extrem frustrierende Problem. Bis vor ein paar Stunden habe ich Code geschrieben und alles lief wie geplant, bis ich beschlossen, einige Dinge zu optimieren und löschte ein paar Klassen. Ich habe alle Fehler behoben, die dadurch aufgetreten sind, z. false includes, etc. Leider ist der VS-Compiler danach verrückt geworden. Es begann mir Fehler wie geben:Compilerfehler C2653: kein Klassen- oder Namespacename
Error 14 error C2653: 'Class' : is not a class or namespace name
oder sogar
Error 5 error C2143: syntax error : missing ';' before '}'
Error 4 error C2059: syntax error : '>'
Ich habe mehrmals überprüft, und alles ist in es richtig ist: alle Header enthalten, alle Symbole platziert, wo sie sein sollten .
Soweit ich verstehe, ist das Problem nicht mit meinem Code, sondern mit dem Compiler selbst ... Visual Studio kann manchmal wirklich nervig sein, denke ich. Wie auch immer, ich wäre wirklich dankbar, wenn mir jemand dabei helfen könnte.
(By the way, deaktivieren vorkompilierte Header hat nicht Arbeit)
Relevante Teile des Codes:
Error 14:
#include "PlayerEntity.h"
PlayerEntity::PlayerEntity(void) {} // This line causes the error
Fehler 5:
class GameScreen : public BaseScreen
{
public:
...
private:
...
}; // This line causes the error
Fehler 4:
private:
std::vector<BaseEntity*> _EntityList; // This line causes the error
Whole PlayerEntity.h Datei:
#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
Whole GameScreen.h Datei:
#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
Whole BaseEntity.h Datei:
#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
Whole Input.h Datei :
#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
Whole ScreenSystem.h Datei:
#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
Ich bezweifle, dass es ein Problem mit dem Compiler selbst ist. –
Überprüfen Sie die Schließungen Ihrer Klassendeklarationen, um sicherzustellen, dass sie mit '};' enden und nicht nur mit '}'; **alle von ihnen**. Überprüfen Sie auch das Gleichgewicht jedes einzelnen '{', '}' Paares. Da der Inhalt des PlayerEntity-Konstruktors, den Sie * zur Verfügung gestellt haben, * eindeutig C++ sein sollte und da nur ein Header-Include vorhanden ist, was Sie möglicherweise glauben macht, dass die Include-Datei ** nicht ** relevant ist und daher nicht enthalten sein sollte hier zur Untersuchung? – WhozCraig
Bitte geben Sie ein [kleines, eigenständiges, korrektes Beispiel] (http://sscce.org/) – Oswald