코딩하다 "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
'Error' 카테고리의 다른 글
[Error, VS] E0077 이 선언에는 저장소 클래스 또는 형식 지정자가 없습니다. (0) | 2019.09.23 |
---|---|
[Error, VS] C1001 컴파일러에서 내부 오류가 발생했습니다. (0) | 2019.09.23 |
[Error,C++] void value not ignored as it ought to be (0) | 2019.04.23 |
[Error, Git Desktop] Commit failed - exit code 128 received, with output: '*** Please tell me who you are. (1) | 2019.03.08 |
[Error, VS] "const char *" 형식의 값을 사용하여 "char *" 형식의 엔터티를 초기화할 수 없습니다. (4) | 2018.12.28 |
댓글