This question already has answers here:
C++ Does not name to a type
                                
                                    (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 dependenciesSpaceShip依赖于Bullet,而后者又依赖于SpaceShip。您需要重构代码以删除循环依赖项。

通常,这可以通过Forward decleration轻松实现,但是更高级的方法(更正确的OOP)包括interfacescallbacks或更好的事件(信号)

关于c++ - “SpaceShip不会命名类型”,即使SpaceShip当然是一种类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14916245/

10-11 13:16