본문 바로가기
Error

[Error,C++]Expression must be a modifiable lvalue 해결법

by matters_ 2020. 5. 25.

코딩하다 "Expression must be a modifiable lvalue" 오류가 가끔 뜬다.

직역하면 "표현식은 수정할 수 있는 lvaue이어야만 한다."라는 뜻이다.

 

여기까지 찾아왔다면 

무슨 소리인가??? 무엇을 잘 못 썼다는 말인 거 같은데 난 잘 못 쓴 게 없다는 분들이 대다수라 생각한다.

 

하지만 결론적으로 잘못 쓰셨다. 표현식을 하나하나 찬찬히 뜯어보시길 바란다.

저 또한 같은 생각을 했고 다시 실수하지 않기 위해 이글을 쓴다..

 

 

그래도 여기서 바로 알고싶다는 분들을 위해 stackoverflow에 있는 사례를 하나 들겠다.

 

int M = 3; 
int C = 5; 
int match = 3;
for ( int k =0; k < C; k ++ )
{
    match --; 
    if ( match == 0 && k = M )
    {
         std::cout << " equals" << std::endl;
    }
}

 

위 표현식에서 아래와 같은 부분에 Expression must be a modifiable lvalue 오류가 발생한다.

if ( match == 0)

 

if 문에 대입연산자를 사용하였기 때문이다. 

대입 연산자는 &&연산자보다 우선순위가 낮다 따라서 위의 if문은 아래와 같은 우선순위를 가진다.

if ((match == 0 && k) = m)

변수 m을 대입하려 하는데 대입하려는 (match == 0 && k)는 boolean을 결과 값으로 같은 rvalue이다. 

rvalue에 rvalue를 대입하니 오류가 발생한 것이다.

 

결론

코드를 자세히 보는 습관을 기르자.

 

 

REFERENCE

https://stackoverflow.com/questions/12745601/expression-must-be-a-modifiable-lvalue

 

Expression must be a modifiable lvalue

I have this following code: int M = 3; int C = 5; int match = 3; for ( int k =0; k < C; k ++ ) { match --; if ( match == 0 && k = M ) { std::cout << " equa...

stackoverflow.com

 

댓글