2012-01-06 4 views
6

나는 this tutorial을 사용하고 있습니다,하지만 난 그것에서 코드를 컴파일 할 때 :"lvalue로 사용되는 rvalue"경고를 피하는 방법은 무엇입니까?

D3DXMatrixLookAtLH(
    &matView, 
    &D3DXVECTOR3(0.0f, 10.0f, 0.0f), // warning C4238 
    &D3DXVECTOR3(0.0f, 0.0f, 0.0f), // warning C4238 
    &D3DXVECTOR3(0.0f, 0.0f, 1.0f) // warning C4238 
); 

를 내가 얻을 :

경고 C4238를 : 비표준 확장 사용 : 좌변

으로 사용되는 클래스를 rvalue를

추가 코드 줄없이이 작업을 수행하는 적절한 (경고없이) 방법은 무엇입니까?

또한, 그 코드 줄에 대해 나쁘다는 것이 궁금합니다. 정상적으로 작동하면 경고 메시지를 표시하는 이유는 무엇입니까? 아니면 ...?

+1

사실, 임시 주소 (rvalue)를 사용할 수 없습니다. 'operator &'*는 lvalue가 필요합니다. 경고는 그것을 정확하게 설명합니다. 그러나, 사실상 말하자면, 임시 코드는 완전한 표현식 (함수 호출)이 끝날 때까지 살아 있기 때문에 코드는 괜찮습니다. – Xeo

+2

코드가 이식 가능하지 않기 때문에 경고 메시지가 나타납니다. 당신의 컴파일러는 그것을 허용하는 비표준 확장을 가지고있다; 다른 컴파일러는이를 거부 할 수 있습니다. –

+0

나쁜 점은 다음에 실수로 'matView'를 일시적으로 만들 것입니다. – lapk

답변

15

임시 주소를 사용하고 있습니다. 너는 그렇게 할 수 없다. 사전에 벡터를 선언하십시오.

D3DXVECTOR3 a(0.0f, 10.0f, 0.0f) 
      ,b(0.0f, 0.0f, 0.0f) 
      ,c(0.0f, 0.0f, 1.0f); 
D3DXMatrixLookAtLH(&matView, &a, &b, &c); 

"추가 코드없이 사용 하시겠습니까?" 왜냐하면 그것은 어리석은 요구 사항이기 때문입니다.

+5

특히 줄 바꿈을 제거하여이 문제를 피할 수 있기 때문에! – Joshua

+3

'올바른 코드/g를 쓰는 것보다 중요하지 않은 요청/요청 ' –

+3

소원이 답변의 두 부분을 모두 +1 할 수 있습니다. –

관련 문제