标题文件错误:预期'=',',',';','asm'或'__attribute__'之前

r36*_*363 0 c++ compiler-errors

我目前正在运行一个名为Relation的类的c ++项目.

我正在尝试编译它,但我不断得到此错误,无论我正在使用的文件扩展名.

编译器是cc,我正在尝试编译的类,即使在如下所示为空时,也会导致此错误.

我已经尝试了c ++头扩展,并且发生了相同的错误.

#ifndef RELATION_H_
#define RELATION_H_

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

#endif
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 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'
Run Code Online (Sandbox Code Playgroud)

您应该检查您的cc编译器是否实际上能够编译C++,并且需要使用哪些选项(如果有的话)来执行此操作.

如果它gcc(并且它看起来确实如此,基于完全相同的错误消息),您可能需要确保您正在调用g++而不是gcc和/或您的源文件(不是标题)的扩展名是已识别的一,像.cpp (a).

我不完全确定下面的规则,gcc但我总是发现使用源文件blahblah.cpp和明确使用它更安全g++.


(a)推理:既然你在你的特定情况下提到你正在使用正确的头文件扩展名,我认为一种可能性是头扩展对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
Run Code Online (Sandbox Code Playgroud)

换句话说,我不认为xyzzy.hpp如果包含它的源文件仍然存在,那么包含(例如)的头文件会强制编译器编译C++ plugh.c.