2012-01-19 16 views
-1

誰でもこのファイルをコンパイルすると "Block.h:20:error:複数の型が1つの宣言になる"というエラーメッセージが表示されます。この問題を解決するものは何もなく、私はかなり不満を感じています。C++の "複数の型の1つの宣言"エラーの発生

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** 
+2

どれが 'Block.h 'ですか? – templatetypedef

+0

最後のもの(Blockクラスを含むもの)。 –

+2

エラーが20行目にあり、上記のいずれにも20行ありません。 – LostInTheCode

答えて

1

このコードは問題ありません。私は特定の行に間違ったことは何も見えません。しかし、Xlibはかなりの数のマクロを定義するのが好きで、通常はCamelCaseをマクロに使用するCライブラリです。つまり、宣言の中の何かが、実際にはC++コンパイラが好きではないものに拡張されるマクロであると思われます。この問題を見つけるには、遍在する-Eフラグを使用して、前処理されたソースを見ることをお勧めします。つまり、-oフラグ(およびそれに続く名前)と-cフラグを削除します。それ以外の場合は、基本的にコマンドラインを保持します。結果は標準出力に書き出されます。つまり、出力を多かれ少なかれまたは一部のファイルにリダイレクトしたいとします。

また、すべての名前にプレフィックスを付けることができます。プレフィックスはX11ヘッダーのいずれにも使用されません。いくつかの名前の一部、不快な言葉など私は私のシステム上で問題を再現しようとしましたが、私はエラーメッセージが表示されませんでした。

関連する問題