當您嘗試編譯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++
。
(一)推理:既然你在,你使用了正確的頭文件擴展你的具體情況提了,我認爲一種可能性是擴展頭有任何作用什麼gcc
嘗試將源文件編譯爲。它僅使用源文件擴展名,按照以下轉錄物:
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
換句話說,我不認爲具有(例如)xyzzy.hpp
將強制編譯器編譯C包含的頭文件++如果包含它的源文件仍然是plugh.c
。
這段代碼沒有錯誤。大多數情況下,它包含在代碼中,然後再包含這個頭文件(本身可能是另一個頭文件) – Ayjay
那麼,如果您嘗試通過C編譯器運行而不是C++運行它,那麼看起來就是這種情況: ) – paxdiablo