Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get around the warning "rvalue used as lvalue"?

I'm using this tutorial, but when I compile the code from it:

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
);

I get:

warning C4238: nonstandard extension used : class rvalue used as lvalue

What is the proper (warningless) way of doing this without additional lines of code?

Also, I'm wondering what is so bad about that line of code? Why does it even give warning if it works just fine? Or does it...?

like image 632
Rookie Avatar asked Jan 06 '12 19:01

Rookie


1 Answers

You are taking the address of a temporary. You can't do that. Declare your vectors beforehand:

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);

Note that I ignored your "without additional lines of code?" requirement, because that's a stupid requirement.

like image 195
Benjamin Lindley Avatar answered Nov 07 '22 02:11

Benjamin Lindley