2011-10-24 3 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++ 같은 소스 파일을 사용하는 것으로 나타났습니다.


(A) 추론 : 당신은 당신이 올바른 헤더 파일 확장자를 사용하는 특정 경우에 언급 이후, 나는 일 가능성이 헤더 확장이 무엇 gcc에 아무런 효과가 없다고 생각 소스 파일을 다음과 같이 컴파일하려고 시도합니다. 나는 C를 컴파일하는 컴파일러를 강제 xyzzy.hpp (예를 들어)의 포함 헤더 파일을 가지고 생각하지 않는다, 즉

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 

++에는 다음과 같은 성적에 따라 만 소스 파일 확장자를 사용하는 파일이 포함 된 소스 파일이 여전히 plugh.c 인 경우

+0

테스트 목적으로 기존 * .c 파일을 추가 했으므로 클래스 정의가있는 * .h 파일을 포함 할 때까지는 아무 문제가 없었습니다. 매번 머리글을 주석 처리했기 때문에 머리를 긁어 냈습니다. * .c를 * .cpp로 바꿨고 붐 (boom)은 매력처럼 작동합니다. 때로는 당신의 얼굴 앞에서 그 오른쪽이 바로 이런 대답에서 약간의 움직임을 취합니다. 다시 한번 감사드립니다. – CCS