什么是“错误C2061:语法错误:标识符”?

时间:2013-04-03 08:32:02

标签: c++

编译时出现错误调用“错误C2061:语法错误:标识符'播放器'”

我无法弄清楚我的代码有什么问题。这是我的代码

#include "Platform.h"
#include "Player.h"
class Collision
{
public:
  Collision(void);
  ~Collision(void);
  static bool IsCollision(Player &player, Platform& platform);
};

“IsCollision”方法中存在错误。

Player.h

#include <SFML/Graphics.hpp>
#include "rapidxml.hpp"
#include <fstream>
#include <iostream>
#include "Collision.h"
using namespace rapidxml;
class Player
{
private:
    sf::Texture playerTexture;
    sf::Sprite playerSprite;
    sf::Vector2u position;
    sf::Vector2u source;
    sf::Vector2u size;
    int frameCounter, switchFrame, frameSpeed;
    int walkSpriteWidth;
    float velocity;
    bool isWalk;
    bool isStand;
    bool isFaceRight;

public:
    Player(void);
    ~Player(void);

    void Init();
    void Draw(sf::RenderWindow *window);
    void MoveForward();
    void MoveBackward();
    void Update(sf::Clock *clock);
    void SetSourceY(int value);
    void SetWalk(bool value);
    void SetFacing(std::string value);
    void SetStand(bool value);
    void Stand();
    std::string GetStatus();
    void PrintStatus();
    sf::Vector2f GetPosition();
    int GetWidth();
    int GetHeight();
};

3 个答案:

答案 0 :(得分:7)

您有一个循环包含依赖项。 Collision.h包括Player.h,反之亦然。最简单的解决方案是从#include "Collision.h"中删除Player.h,因为Collision声明中不需要Player类。除此之外,看起来Collision.h中的一些包含可以被前向声明替换:

// forward declarations
class Player;
class Platform;

class Collision
{
public:
  Collision(void);
  ~Collision(void);
  static bool IsCollision(Player &player, Platform& platform);
};

然后,您可以将这些内容放入Collision的实施文件中。

答案 1 :(得分:3)

这是一个非常常见的错误 - 你有循环包含依赖。

查看您的代码,您应该将#include "Player.h"替换为class Player;中的Collision.h。这称为“前向声明”,将打破循环依赖。


此外,添加包含警卫会很好,例如:

#ifndef MY_PLAYER_CLASS
#define MY_PLAYER_CLASS

...

#endif

这应该针对您编写的每个标题进行。

答案 2 :(得分:1)

循环依赖,或者您正在使用C编译器获取C ++代码