Error: taking address of temporary [-fpermissive]

后端 未结 3 894
生来不讨喜
生来不讨喜 2021-02-04 05:36

I\'ve been looking into this for a few hours, to no avail. Basically I have

struct rectangle {
    int x, y, w, h;
};

rectangle player::RegionCoordinates() // R         


        
3条回答
  •  执念已碎
    2021-02-04 05:55

    Given the kind of error you are getting, I must assume RegionCoordinates() is returning an object by value, thus causing the creation of a temporary, and you are taking the address of that temporary.

    The address-of operator requires an lvalue as its operand, but you are applying it to an rvalue (temporaries are rvalues).

    You could do this (if you are not using C++11, replace auto with the type returned by RegionCoordinates):

    auto rcPlayer1 = player1.RegionCoordinates();
    auto rcStick1 = player1.RegionCoordinates();
    if (IsCollision(&rcPlayer1, &rcStick1)) //ERROR
    {
        player1.score+=10;
        stick1.x = rand() % 600+1;
        stick1.y = rand() % 400+1;
        play_sample(pickup,128,128,1000,false);
    }
    

    Alternatively, you can change IsCollision so that it accepts references rather than pointers, as suggested by Angew in his answer.

提交回复
热议问题