2012-03-22 4 views
0
IDirect3DSurface9 *var = NULL; 

IDirect3DSurface9 *** ret; 

var에 의해 참조 해제 된 값을 ret가 가리키는 변수에 할당하려고합니다. 나는 이것이 올바른 C++ 구문 느낌C++의 포인터 할당. 포인터에 대한 포인터 포인터가 왼쪽에 있음

(*(*(ret[0]))) = var; 

:

은 내가 FOLL했다. 그런데 왜 내가 컴파일 오류가 발생하고 있는지를 다음과 같이

오류 C2679를 : 진 '=': 아무 연산자 유형 "IDirect3DSurface9 *"의 오른쪽 피연산자 소요 (또는이 더 허용 변환 없음)하는 발견 .

올바른 구문은 무엇입니까?

+1

질문을 편집하여 대담한 얼굴의 대문자를 모두 지울 수 있습니까? 소리지를 필요가 없습니다. 우리는 당신을 잘 여기 있습니다. –

+0

조금 편집했는데 별표가 의도 한 수에 대해 실제로 확신하지 못합니다. -S –

+0

@KerrekSB Gah, 별표의 수가 몇 초마다 계속 변경됩니다. 내 대답을 삭제하겠습니다! –

답변

4

포인터를 3 번 ​​참조 해제했습니다. 한 번 배열로 취급하고 [0] 색인을 사용한 다음 * 연산자를 두 번 더 사용합니다. var과 호환 되려면 두 번만 참조 해제해야합니다.

더 명시하기 위해,이를 분해하자

  • retIDirect3DSurface9***을 입력있다.
  • ret[0]IDirect3DSurface9**입니다.
  • *(ret[0])IDirect3DSurface9*입니다.
  • *(*(ret[0]))IDirect3DSurface9입니다.

그리고 분명히 *(*(ret[0]))IDirect3DSurface9*을 입력있다 var와 호환 할당이 아니라고 다음과 같습니다.

코드가 무엇인지에 관해서는 확실히 말할 수는 없지만 한 수준의 간접 참조를 제거해야합니다.

+0

Incredible !!!! 너무 빨리 대답 해 주셔서 대단히 감사합니다 !! 나는 그것을 해결했다. :) * (* (ret [0])) = * var; 이제 LHS와 RHS는 모두 동일합니다. 따라서 컴파일 오류가 없습니다. – codeLover

+0

그건 컴파일 오류를 제거하지만 나는 그것이 맞다고 확신하지 않습니다. 분명히 당신의 임무는'IDirect3DSurface9' 레벨이 아닌'IDirect3DSurface9 * '레벨에 있어야합니다. –

+0

예 * (ret [0]) = var; 그러나 IDirectX3DSurface9 * 레벨이나 IDirectX3DSurface9 레벨에서 과제를 어떻게 수행해야하는지에 대해서는 의문을 품습니다. 마지막으로 우리는 tyoe IDirectX3DSurface9 변수에 저장된 값을 복사하고 있습니까? 미안해 내가 틀렸다면. 친절하게 나를 정정하고 명확히하십시오. 감사. – codeLover

0

당신은 아마 원하는 :

(*(*(ret[0]))) = &var; 

또는

모든 *
*(*(*(ret[0]))) = var; 
2

[] 거리에 간접적 인 수준을합니다. 오른쪽 측 IDirect3DSurface9 *을 입력 가지고있는 동안 그래서 코드

(*(*(ret[0]))) = var; 

의 왼쪽 측, IDirect3DSurface9을 입력합니다. 두 가지 유형이 다르므로 컴파일러 오류가 발생합니다. LHS에서 *을 제거하거나 적어도 &var이되도록 & (주소 연산자)을 RHS에 추가하여이 문제를 해결해야합니다.