2012-02-07 23 views
0

私はSDLライブラリでCode :: BlocksとMingw32を使用しています。このエラーは、私のコードの13行目に表示されます(下にコメントされています)。エラー:1つの宣言に複数の型があります

いくつかの検索の後で、私はそれがセミコロン(;)が不足していると信じていましたが、ここではそうは見えません。追加の研究では、インクルードファイルに誤りがあるかもしれないという事実がありました。

残念ながら、インクルードにエラーはなく、インクルードがコメントアウトされてもこのエラーは解決しません。 enumブロックがコメントアウトされると、エラーはクラス宣言の最後にジャンプします。

#ifndef _TILE_H_ 
#define _TILE_H_ 

#include "Define.h" 

enum 
{ 
    TILE_TYPE_NONE = 0, 
    TILE_TYPE_GROUND, 
    TILE_TYPE_RAMPUP, 
    TILE_TYPE_RAISED, 
    TILE_TYPE_RAMPDOWN 
}; //error occurs here (line 13) 

class Tile 
{ 
public: 
    int TileID; 
    int TypeID; 

public: 
    Tile(); 
}; 

#endif 

これは実際に新しいクラスを追加した後に起こって始めた、しかし新しいクラスは完全に無関係であると、使用が含ままたはまったく掲載さ1から継承しません。

本当にありがとうございます。

EDIT(Define.hを追加):私はDefine.hために含めるをコメントアウトすると

#ifndef _DEFINE_H_ 
#define _DEFINE_H_ 

#define MAP_WIDTH 40 
#define MAP_HEIGHT 40 

#define TILE_SIZE 16 

#define WINDOW_WIDTH 640 
#define WINDOW_HEIGHT 480 

#endif 
+2

「enum」に名前を付けることを意味しましたか? (例: 'enum e_tile_type {/*...*/};') – Johnsyweb

+1

ファイルが含まれている問題を探します – Anycorn

+0

コンパイラがあなたに与えるエラーメッセージは何ですか? – Pochi

答えて

8

あなたはこのを持つファイルがあります:Something.h

#include "Something.h" 
#include "Tile.h" 

を、あなたはこの持っている:

class Something { 
    // ... 
} 

をセミコロンが欠落しているので、コンパイラが見ている:

class Something { 
    // ... 
} 
enum { 
}; 

これは2つのタイプを含む1つの宣言です(classenum)、これは許可されていません。あなたがタイプと同じ宣言で、新しいタイプのインスタンスを宣言することができますので、セミコロンはclassstruct、およびenum後に必要とされています

struct Point { int x; int y; } my_point; 

(また、_で始まる名前と大文字が予約されて使用してください。 _TILE_H_の代わりにTILE_Hとなります。)

+0

これはまさにそのケースでした。そこから数マイル離れたところにはセミコロンがありませんでした。ご説明ありがとうございます。 – TechRomancer

+0

@TechRomancer:私の喜びです。私は本でC++のすべての間違いをしました。 :P –

1

、このコードは、G ++を使用して私のために罰金コンパイルします。これは、あなたが示唆するように、インクルードされたファイルに実際に問題がある可能性があることを示唆しています。おそらく、あなたはDefine.hの最後にセミコロンがないかもしれません。あるいはそこに他の構文上の問題があります。

+0

私はDefine.hも含めて投稿を編集しました。インクルードがTile.hでコメントアウトされても、コンパイラは同じエラーをスローします。 – TechRomancer

+0

はい、Define.hに問題はないようです。しかし、マクロ、コードは含まれていないので、問題は実際にTile.hの直前に現れるコードにあります。プリプロセッサの出力を見るために、Tile.hが "gcc -E"または同等のものに含まれているファイルをコンパイルしてみてください。 –

0

次のように私はあなたの最初のファイルTile.hと呼ばれ、Tile.cppを作成しました:

#include "Tile.h" 

Tile::Tile() 
{ 
} 

int main() 
{ 
    return 0; 
} 

それから私は、G ++でのUbuntu Linux上でコンパイル:

$ g++ Tile.cpp -o Tile

私はのために同じ(コンパイルや実行時エラーどちらを受けgcc)。あなたの問題は他の場所にあります。#include d個のファイル、または特定の種類のプラットフォーム固有の名前の競合が表示されます。問題がなくなるまで徐々にすべての名前を変更しようとしています。

編集:元のコードはこの場合変更されません。

関連する問題