c++ - "' SpaceShip ' does not name a type"即使 SpaceShip 肯定是一种类型

标签 c++ class types composition

<分区>

我正在开发一款小行星游戏,以此自学一些编程知识,但我遇到了一个错误,即我的一个类(class)没有命名类型。

我有一个继承自 Entity 类的 SpaceShip 类(两者均已定义)和一个继承自 Entity 类的 Bullet 类。我试图将 SpaceShip Member 放入 Bullet Class 中,作为一种告诉谁发射子弹的方式,但它一直告诉我“'SpaceShip' 没有命名类型”。

这是一些代码:

宇宙飞船.h

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 );
...
};

子弹.h

#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 ' does not name a type"即使 SpaceShip 肯定是一种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14916245/

相关文章:

c++ - 使用初始化列表构造时如何避免创建(和删除)临时对象?

c++ - opengl 计算人脸的法线

java - IntelliJ IDEA 从接口(interface)跳转到 Java 中的实现类

C++ 公共(public)和私有(private)数据类型

mysql - Doctrine 1.2 模型使用 Zend Framework 和 MySQL 5 将整数字段返回为字符串值

scala - 我们可以使用单例 .type 作为类型参数吗?

c++ - 类方法和参数传递

c++ - 使用 Qt 树模型存储数据?

python - 如何使用装饰器类来装饰实例方法?

javascript - 谷歌 JavaScript 闭包 : defining a structure passed to many functions