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
の場合。
このコードにはエラーはありません。ほとんどの場合、このヘッダ(それ自体が別のヘッダかもしれない)をインクルードする前にコード内にあるでしょう。 – Ayjay
C++ではなくCコンパイラで実行しようとするとエラーが発生します。 ) – paxdiablo