编译时出现错误调用"错误C2061:语法错误:标识符'播放器'"
我无法弄清楚我的代码有什么问题.这是我的代码
Run Code Online (Sandbox Code Playgroud)#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();
};
Run Code Online (Sandbox Code Playgroud)
你有一个循环包含依赖.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);
};
Run Code Online (Sandbox Code Playgroud)
然后,您可以将包含在Collision实现文件中.
这是一个很常见的错误——你有循环包含依赖。
查看您的代码,您应该替换#include "Player.h"为class Player;in Collision.h。这称为“前向声明”,将打破循环依赖。
此外,最好添加包含守卫,例如:
#ifndef MY_PLAYER_CLASS
#define MY_PLAYER_CLASS
...
#endif
Run Code Online (Sandbox Code Playgroud)
这应该为您编写的每个标题完成。
| 归档时间: |
|
| 查看次数: |
13540 次 |
| 最近记录: |