Ошибка файла заголовка: ожидается '=', ',', ';', 'asm' или '__attribute__' перед тем - PullRequest
0 голосов
/ 24 октября 2011

В настоящее время я работаю над проектом c ++ с классом под названием Relation.

Я пытаюсь скомпилировать его, но я постоянно получаю эту ошибку, независимо от того, какое расширение файла я использую.

Компилятор - это cc, и класс, который я пытаюсь скомпилировать, даже если он пуст, как показано ниже, вызывает эту ошибку.

Я пробовал расширения заголовка c ++, и возникают те же ошибки.

#ifndef RELATION_H_
#define RELATION_H_

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

#endif

1 Ответ

11 голосов
/ 24 октября 2011

Это ошибка, которую вы получаете, когда пытаетесь скомпилировать код 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) Обоснование: поскольку в вашем конкретном случае вы упоминаете, что используете правильные header расширения файла,Я думаю, что одна из возможностей заключается в том, что расширение заголовка никак не влияет на то, что gcc пытается компилировать.оставьте исходный файл как.Он использует только расширение файла source , согласно следующей записи:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...