2010-06-21 1 views
0

내가 동적으로 만든 프로토 타입이 있습니다포인터는, 내가 올바른 방법으로 함수를 호출 어떻게 - 초보자 질문

typedef double ICEDouble; 
-(BOOL) getPosition:(SyDRpcInterfacePositionType)type longitude:(ICEDouble *)longitude latitude:(ICEDouble *)latitude; 

을하고 난 아무 계획이 없기 때문에 나는, 그래서 부를 것이다, 어떻게 올바른 방법으로 그것을 할 :

warning: passing argument 2 of 'getPosition:longitude:latitude:' from incompatible pointer type 
warning: passing argument 3 of 'getPosition:longitude:latitude:' from incompatible pointer type 

정말 놀라운 일이 아니다, 그러나 누군가는 테하시기 바랍니다 수 있습니다

NSNumber* longitudeReturn; 
NSNumber** latitudeReturn;  
[prx getPosition:SyDRpcInterfaceMAPMATCHED longitude:longitudeReturn latitude:latitudeReturn]; 

를 컴파일러가 말한다 어떻게해야할까요? 초보자를위한 약간의 설명이있을 것 같습니까?

+0

또한 'ICEDouble'정의 방법을 추가해야합니다. 'double'에 대한 typedef입니까, 아니면 Objective-C 클래스입니까? – harms

+0

typedef double ICEDouble; 예, 이중입니다. 죄송합니다. – nico

답변

3

ICEDouble이 typedef가`double '이라고 가정하면 호출하는 메소드에'out '매개 변수가 두 개있는 것 같습니다. 다음과 같이 호출해야합니다.

메소드가 객체 오버 헤드없이 여러 값을 반환해야하는 경우는 일반적인 관용구입니다.

NSNumber * nLatitude = [NSNumber numberWithDouble:lat]; 
NSNumber * nLongitude = [NSNumber numberWithDouble:long]; 

확인하지만 getPosition:의 반환 유형 : 필요한 경우 당신이 그들을 필요로하는 경우, 당신은 다음을 통해 NSNumber의 이러한 변환 할 수 있습니다. BOOL을 반환하면 반환 된 값을 사용하기 전에 결과를 확인해야합니다. 그렇지 않은 경우 latlong은 가비지 값을 나타냅니다.

2

몇 가지 : 서명은 ICEDouble 정의

  1. , 당신은 NSNumber을 제공합니다.
  2. NSNumber** latitudeReturn을 사용하면 포인터에 대한 포인터를 정의 할 수 있습니다.

그래서 나는

ICEDouble* longitudeReturn; 
ICEDouble* latitudeReturn;  
[prx getPosition:SyDRpcInterfaceMAPMATCHED longitude:longitudeReturn latitude:latitudeReturn]; 
0

이이 구성에 있어야 같아요?

SyDRpcInterfaceNavInfos** datenSammlung; 



    //-(BOOL) getGuidanceInfos:(SyDRpcInterfaceNavInfos **)infos; 

    if([prx getGuidanceInfos:&datenSammlung]) {//further activities} 

거세한 숫양 나는 &을 할 수 없으며, 내가 있기 때문에 여분의 포인터 타입의 *의 끝을 떠날 경우 programm에 여기에서 두 별자리로 종료합니다. SyDRpcInterfaceNavInfos는 구조체입니다.

+0

그냥 구조체를 초기화해야했습니다 ... 완료되었고 지금 작동합니다. – nico