2012-08-22 4 views
0

c 파일에서 cpp 메소드를 호출해야합니다. 는 I는이 인터페이스를 작성한 ..c와 C++가 혼합 된

CPP 파일

extern "C" void C_Test(int p){ 
     Class::CPP_Test(p); 
} 

C 파일 I는 C 파일 오류

extern void C_Test(int p); 


void C_Function(){ 
    C_Test(10); //error 
} 

"C_Test에 정의 기준 (int)를"

어떤 아이디어가 잘못 되었나요?

+4

컴파일 및 링크 방법에 대한 정보를 표시해야합니다. – unwind

+5

당신은 모든 것을 연결하지 않습니다. –

+0

두 파일 유형 모두에 C++ 컴파일러를 사용하고 있습니다. "C"없이는 작동합니다! 또한 extern "c"없이 작동합니다! – Meloun

답변

0

두 가지 유형의 파일에 모두 C++ 컴파일러를 사용하고 있습니다. "C"가 없으면 작동합니다! 또한 extern "c"없이 작동합니다!

+0

그건 혼란 스러울뿐입니다. 당신은 당신의 질문에 C 파일에서 C++ 함수를 호출해야한다고 말했습니다. 즉, C 및 C++ 컴파일러를 사용하고 있습니다. 이제는 C++ 컴파일러 만 사용한다고 말합니다. 그게 무슨 뜻 이죠? – AnT

1

함수 프로토 타입 전용으로 extern을 선언하고 올바르게 연결해야합니다. 이것에 중독되면, CPP_Test (p)는 Class의 정적 멤버 여야합니다. 그렇지 않으면 코드가 작동하지 않습니다. 마침내, extern "C"는 괄호 안에 그 내용을 담아 야합니다.

extern "C" 
{ 
    void C_Test(int p) 
    { 
    Class::CPP_Test(p); 
    } 
} 

이 경우 알려주십시오.

+0

당신의 아이디어를 주셔서 감사합니다, 내 의견을 참조하십시오 ... – Meloun

1

C++ 컴파일러로 둘 다 컴파일합니까? C++ 컴파일러는 C 소스 파일을 C++로 컴파일 할 수 있습니다.이 경우 이름 변환을 수행하므로 C 소스 파일을 C 컴파일러로 컴파일해야합니다.

+0

난 그들 mangle 보았다 접두사 (나는 아마도 Visual Studio에서 메모리 또는 어쩌면 볼랜드 생각), 그래서 extern "C"경우에도 귀하의 함수 _C_Test (int). 귀하의 설정을보십시오. 맵 파일을 검사하여 내보내는 기호를 확인하십시오. –