有人能告诉我为什么在编译此文件时出现“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**
答案 0 :(得分:1)
原样,代码看起来不错。我看不出特定的线路有什么问题。但是,Xlib是一个C库,它喜欢定义相当多的宏,并且通常也使用CamelCase作为宏。也就是说,我怀疑你的声明中的某些东西实际上恰好是一个宏,它被扩展为C ++编译器不喜欢的东西。要找到此问题,我建议您使用无所不在的-E
标志来查看预处理的源。也就是说,你将删除任何-o标志(及其后面的名称)和-c标志,否则你基本上会保留命令行。结果将写入标准输出,即您希望将输出重定向到更多/更少或某个文件。
或者,你可以通过一个不太可能在任何X11标题中使用的前缀来为你的所有名字加上前缀,例如:部分名称,冒犯性词语等。我试图在我的系统上重现问题,但我没有收到错误信息。