2011-10-24 9 views
0

現在、RelationというクラスのC++プロジェクトを実行しています。ヘッダーファイルエラー:予期しない '='、 '、'、 ';'、 'asm'または '__attribute__'の前に

コンパイルしようとしていますが、使用しているファイル拡張子に関係なく、このエラーが発生します。

コンパイラはCCです。私がコンパイルしようとしているクラスは、空の場合でもこのエラーが発生します。

私はC++ヘッダー拡張を試しましたが、同じエラーが発生します。

#ifndef RELATION_H_ 
#define RELATION_H_ 

class Relation { 
public: 
Relation(); 
virtual ~Relation(); 
}; 

#endif 
+1

このコードにはエラーはありません。ほとんどの場合、このヘッダ(それ自体が別のヘッダかもしれない)をインクルードする前にコード内にあるでしょう。 – Ayjay

+0

C++ではなくCコンパイラで実行しようとするとエラーが発生します。 ) – paxdiablo

答えて

11

CコンパイラでC++コードをコンパイルしようとすると、エラーが発生します。

pax$ cat qq.cpp 
class Relation { 
public: 
    Relation(); 
    virtual ~Relation(); 
}; 

pax$ g++ -c -o qq.o qq.cpp 

pax$ cp qq.cpp qq.c 

pax$ gcc -c -o qq.o qq.c 
qq.c:4: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Relation' 

あなたのccコンパイラがあれば、オプションは、それがそうするために必要とされ、C++と何をコンパイルすると、実際にできるであることを確認する必要があります。

それはgccをだ(と、それは絶対に同じエラーメッセージに基づいて、あるように、それは確かにに見える)場合、あなたはg++ではなくgccを呼び出していることを確認する必要があるかもしれないおよび/またはそのためのあなたの拡張機能ソースファイル(ヘッダではない)は、.cpp(a)のように認識されます。

私はgccは、以下の完全一定のルールませんが、私はいつもそれがより安全blahblah.cpp明示的使用g++などのソースファイルを使用することを発見しました。


(a)の推論:あなたは正しいヘッダファイル拡張子を使用している、あなたの特定のケースで言及しているので、私は一つの可能​​性は、ヘッダ拡張が何gccに全く影響を与えないということだと思いますソースファイルを次のようにコンパイルしようとします。私はCをコンパイルするコンパイラを強制するxyzzy.hpp(例えば)の含まれるヘッダファイルを持つとは思わない、言い換えれば

pax$ cat xyzzy.hpp 
class Relation { 
public: 
    Relation(); 
    virtual ~Relation(); 
}; 

pax$ cat plugh.c 
#include "xyzzy.hpp" 

pax$ gcc -c -o plugh.o plugh.c 
In file included from plugh.c:1: 
xyzzy.hpp:1: error: expected '=', ',', ';', 'asm' or '__attribute__' 
        before 'Relation' 

pax$ cp plugh.c plugh.cpp 

pax$ gcc -c -o plugh.o plugh.cpp 

++:それは、次の転写物ごとに、唯一ソースファイル拡張子を使用していますそれを含むソースファイルがまだplugh.cの場合。

+0

テスト用に既存の* .cファイルを追加しましたが、* .hファイルにクラス定義を含めるまでは問題ありませんでした。ヘッダーをコメントアウトするたびに私の頭を傷つけました。 * .cを* .cppに変更し、ブームのように動作します。時にはあなたの顔の前でその権利があり、それはちょうどこのような答えからちょっと振る舞います。再度、感謝します。 – CCS

関連する問題