This question already has answers here:
C++ Does not name to a type
(2个答案)
6年前关闭。
我正在开发一个Asteroids游戏,以此来教自己一些编程知识,但我收到这样的错误:我的一个班级没有命名类型。
我有一个从Entity类(均已定义)继承的SpaceShip类,还有一个从Entity继承的Bullet类。我正在尝试将SpaceShip成员放到Bullet类中,以告诉谁射中了子弹,但它一直告诉我“ SpaceShip没有命名类型”。
这是一些代码:
飞船
项目符号
为什么没有找到SpaceShip类型?
(2个答案)
6年前关闭。
我正在开发一个Asteroids游戏,以此来教自己一些编程知识,但我收到这样的错误:我的一个班级没有命名类型。
我有一个从Entity类(均已定义)继承的SpaceShip类,还有一个从Entity继承的Bullet类。我正在尝试将SpaceShip成员放到Bullet类中,以告诉谁射中了子弹,但它一直告诉我“ SpaceShip没有命名类型”。
这是一些代码:
飞船
class SpaceShip : public Entity
{
private:
int lives;
int score;
int animationRow;
int shotsFired;
public:
SpaceShip();
void Init(SDL_Surface *image = NULL);
void Destroy();
void Update();
void Render( SDL_Surface *screen );
...
};
项目符号
#ifndef BULLET_H
#define BULLET_H
#include <SDL/SDL_gfxPrimitives.h>
#include "entity.h"
#include "spaceship.h"
#include "Globals.h"
class Bullet : public Entity
{
private:
SpaceShip* owner;
public:
Bullet( SpaceShip* ship );
void Update();
void Render( SDL_Surface *screen );
void Destroy();
void Collided(int objectID);
};
#endif // BULLET_H
为什么没有找到SpaceShip类型?
最佳答案
根据注释的澄清,您的代码似乎具有Circular dependencies。 SpaceShip
依赖于Bullet
,而后者又依赖于SpaceShip
。您需要重构代码以删除循环依赖项。
通常,这可以通过Forward decleration轻松实现,但是更高级的方法(更正确的OOP)包括interfaces,callbacks或更好的事件(信号)
关于c++ - “SpaceShip不会命名类型”,即使SpaceShip当然是一种类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14916245/
10-11 13:16