在C ++中获取“多个类型在一个声明中”错误

时间:2012-01-19 22:58:53

标签: c++

有人能告诉我为什么在编译此文件时出现“Block.h:20:错误:一个声明中有多个类型”错误消息。似乎没有什么能解决这个问题,我感到非常沮丧。

Displayable.h

#include <X11/Xlib.h>
#include <X11/Xutil.h>

// Information to draw on the window.
struct XInfo
{
    Display  *display;
    Window   window;
    GC       gc;
};

// An abstract class representing displayable things. 
class Displayable
{
public:
    virtual void paint(XInfo &xinfo) = 0;
};

Sprite.h

#include "Displayable.h"

enum Collision {
    NO_COLLISION = 0,
    TOP_COLLISION,
    RIGHT_COLLISION,
    BOTTOM_COLLISION,
    LEFT_COLLISION
};

class Sprite : public Displayable {

public:
    int x, y, width, height;

    Sprite();
    virtual void paint(XInfo &xinfo) = 0;
    Collision didCollide(Sprite *s);
};

Block.h

#include "Sprite.h"

class Block : public Sprite {
public:
    virtual void paint(XInfo &xinfo);
    Block(int x, int y, int width, int height);
}; <-- **This is line 20**

1 个答案:

答案 0 :(得分:1)

原样,代码看起来不错。我看不出特定的线路有什么问题。但是,Xlib是一个C库,它喜欢定义相当多的宏,并且通常也使用CamelCase作为宏。也就是说,我怀疑你的声明中的某些东西实际上恰好是一个宏,它被扩展为C ++编译器不喜欢的东西。要找到此问题,我建议您使用无所不在的-E标志来查看预处理的源。也就是说,你将删除任何-o标志(及其后面的名称)和-c标志,否则你基本上会保留命令行。结果将写入标准输出,即您希望将输出重定向到更多/更少或某个文件。

或者,你可以通过一个不太可能在任何X11标题中使用的前缀来为你的所有名字加上前缀,例如:部分名称,冒犯性词语等。我试图在我的系统上重现问题,但我没有收到错误信息。