因此,我最近在使用Visual C++ 2012時遇到了這個極其令人沮喪的問題。直到幾個小時前,我一直在編寫代碼,並且所有內容都按預期工作,直到我決定優化一些東西並刪除幾個類。我修復了因此而出現的所有錯誤,例如假包括等等。不幸的是,在這之後VS編譯器瘋了。它開始給我的錯誤,如:編譯器錯誤C2653:不是類或名稱空間名稱
Error 14 error C2653: 'Class' : is not a class or namespace name
甚至
Error 5 error C2143: syntax error : missing ';' before '}'
Error 4 error C2059: syntax error : '>'
我檢查了多次,並且一切都在它的正確的地方:所有標頭在內,放在哪裏他們應該是所有符號。
據我所知,問題不在於我的代碼,而在於編譯器本身......我想,Visual Studio可能真的很煩人。無論如何,如果有人能幫我解決這個問題,我會非常感激。
(順便說一句,禁用預編譯頭沒不工作)
相關的代碼部分:
錯誤14:
#include "PlayerEntity.h"
PlayerEntity::PlayerEntity(void) {} // This line causes the error
錯誤5:
class GameScreen : public BaseScreen
{
public:
...
private:
...
}; // This line causes the error
錯誤4:
private:
std::vector<BaseEntity*> _EntityList; // This line causes the error
全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
全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
全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
全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
全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
我懷疑這是編譯器本身的問題。 –
檢查你的類聲明的關閉,以確保它們以'};'結束,而不僅僅是'}; **他們全部**。同時檢查每對'{','}對的平衡。由於您提供的PlayerEntity構造函數的內容顯然應該是有效的C++,並且因爲它上面唯一的東西是頭包含,所以可能會讓您認爲包含文件是**不相關,因此不應包含在內這裏進行檢查? – WhozCraig
請提供一個[簡短,自包含,正確的示例](http://sscce.org/) – Oswald