【发布时间】:2013-04-01 09:33:34
【问题描述】:
所以我最近在使用 Visual C++ 2012 时遇到了这个非常令人沮丧的问题。直到几个小时前,我还在编写代码,一切都按预期工作,直到我决定优化一些东西并删除了一些类.我修复了所有因此而弹出的错误,例如false 包含等。不幸的是,在此之后 VS 编译器发疯了。它开始给我错误,例如:
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
Whole 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++,并且由于它上面唯一的内容是头包含,因此可能让您认为包含文件是 not 相关,因此不应包含在此处进行检查? -
一般建议:始终修复您遇到的第一个错误,而不是第一个错误导致的一些错误。第一个错误可能会使编译器感到困惑,随后的所有错误都可能是虚假的。只要您没有修复错误 1,就忘记错误 4、5 和 14。
-
@Jakobson:提到缺少
;的错误通常是编译器遇到无法识别的标记的症状(例如,尚未声明的类的类名。 ..).