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
인 경우
이 코드에는 오류가 없습니다. 아마도이 헤더를 포함하기 전에 (코드 자체가 다른 헤더 일 수 있습니다) – Ayjay
C++ 대신 C 컴파일러를 통해 실행하려고하면 오류가 _ 발생합니다. -) – paxdiablo