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 << " equals" << std::endl;
}
}
But it gives out an error saying:
Error: expression must be a modifiable value
on that "if" line. I am not trying to modify "match" or "k" value here, but why this error? if I only write it like:
if ( match == 0 )
it is ok. Could someone explain it to me?
The assignment operator has lower precedence than &&
, so your condition is equivalent to:
if ((match == 0 && k) = m)
But the left-hand side of this is an rvalue, namely the boolean resulting from the evaluation of the subexpression match == 0 && k
, so you cannot assign to it.
By contrast, comparison has higher precedence, so match == 0 && k == m
is equivalent to:
if ((match == 0) && (k == m))
In C, you will also experience the same error if you declare a:
char array[size];
and than try to assign a value without specifying an index position:
array = '\0';
By doing:
array[index] = '0\';
You're specifying the accessible/modifiable address previously declared.
You test k = M
instead of k == M
.
Maybe it is what you want to do, in this case, write if (match == 0 && (k = M))