2013-04-10 3 views
1

이 내 기본 코드입니다 :extern "C"함수에서 클래스 변수에 어떻게 액세스합니까?

MyClass::MyClass(){ 
    mystring[0] = 0; 
} 

extern "C" MyClass::function(/* variables */){ 
    cerr << mystring << endl; 
} 

문제, 보인다, 내가 세그먼트 오류를 ​​얻을 수 있습니다 : 여기

헤더 파일입니다 :

/** Include the necessary things **/ 

Class MyClass{ 
    private: 
     std::string mystring; 
    /** 
    * Declare constructor, methods, yada yada yada 
    **/ 
}; 

그리고 여기에 소스 파일의 cerr < < 미스트 링 < < endl; 행. function()은 네이티브 C 함수에 대한 인수로 전달되므로 extern "C"함수 여야합니다.

아이디어가 있으십니까? 미리 감사드립니다.

+3

을 ... C 아무튼 클래스에 대해 알지 못하고 반환 값이 없어도 ... –

+0

코드가 컴파일됩니까? – Arun

+0

C 함수는 'MyClass' 인스턴스를 나타내는 인수를 전달해야합니다. – jxh

답변

1

클래스 멤버가 extern "C" 인 것은 유용성이 제한적이므로 C++ 메소드를 C 코드에 노출하는 방법을 피하는 것이 좋습니다.

는 당신이 대신해야하는 추가 인수로 MyClass의 인스턴스에 대한 포인터를 취 래퍼 함수를 ​​생성하고, 원하는 호출을 수행합니다이 작동하지 않습니다

extern "C" void MyClass_function(MyClass *obj, /* variables */) { 
    obj->function(/* variables */); 
} 
+0

자, 고마워. 기본적으로 curl_easy_setopt()에 고정 된 수의 변수로 function()을 전달해야합니다. extern을 사용하는 것이 막 다른 길이므로, 더 많이 파고 들겠습니다. –

관련 문제