2011-10-24 74 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++


(一)推理:既然你在,你使用了正確的文件擴展你的具體情況提了,我認爲一種可能性是擴展頭有任何作用什麼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

+0

爲了測試的目的,我添加了一個現有的* .c文件,一切都很好,直到我嘗試在類定義中包含一個* .h文件。因爲每次我將它的標題註釋掉,我都會感到頭疼。將* .c改爲* .cpp和繁榮,就像魅力一樣。有時候,它在你面前的權利,它只是從這樣的答案中略微推動。再次感謝。 – CCS

相關問題