2013-07-19 1 views
0

xcode의 내 C 코드에 일부 C++를 통합하는 데 어려움을 겪습니다. 먼저 오디오를 재생하는 C++ 프로그램을 작성하여 정상적으로 작동했습니다. 이것은 몇 가지 함수와 구조체로 구성됩니다. 내 목표 - C 코드를 통합하는 시도하기 전에 나는 이런 식으로 뭔가를했다 : objective-c 포인터, 구조체와 함께 C++을 믹스

typedef struct MyPlayer { 

//some declarations... 

} MyPlayer; 
void createInput(MyPlayer *player); 
//some other functions... 

와는 C++ 파일의 기본에

: 완벽하게 작동

int main (int argc, const char * argv[]) { 
MyPlayer player = {0}; 

// create it 
createInput(&player); 
} 

.

는 지금은 괜찮 목표 -C

목적-C 코드의 헤더 파일에

추가 선수 ..

로를 데려 할 생각이 같은 짓 :

self.player = {0}; //does not compile, commented it out to test 
createInput(self.player); 

및 = {0}이 (가) 주석 처리되어 주석 처리되었지만 createInput에 들어갈 때 충돌합니다. 포인터를 사용하거나 구조체를 {0}으로 채우려면 어떻게해야합니까? -c + C++ 프로젝트가 있습니까?

왜 objective-c로 가져 옵니까? 내 인터페이스가 목표 -C/코코아로 만들어져 있기 때문에

고마워! Benjamin

답변

0

문제는 Objective-C의 경우 플레이어 구조가 로컬 변수가 아니며 자산으로 선언 된 것입니다. self.player을 사용하여 값을 할당하면 본질적으로 아무런 의미가없는 속성 설정 메소드 [self setPlayer:{0}]이 호출됩니다. 당신이 그것을 위해 메모리를 할당 할 필요가 있도록 코드를 사용하는 방법을 찾고

, 나는, 실제로 MyPlayer 구조체에 대한 포인터로 선언 플레이어를 가정하고있다. calloc을 사용하는 경우 구조를 만들고 동시에 0으로 초기화 할 수 있습니다. 이 같은

뭔가 :

self.player = calloc(1, sizeof(MyPlayer)); 

이, 메모리를 할당 제로로 내용을 설정하고 플레이어 재산에 해당 메모리를 할당 할 속성 setter를 호출합니다.

내가 잘못했을 경우 플레이어이 (가) Objective-C 코드에 선언 된 방법을 보여 주면 도움이됩니다.

0

구조체 개체를 얼마나 정확하게 선언하는지 알 수 없습니다. 하지만 다음 코드는 제대로 작동합니다.

typedef struct myStruct{ 
    int a; 
    int b; 
    int c; 
}myStruct; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    myStruct abc = {0}; //works fine 

    // myStruct abc; 
    //self.abc = {0}; //error 

    NSLog(@"%d %d %d",abc.a,abc.b,abc.c); 
} 
관련 문제