2011-10-24 76 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

相关问题