Derek C.
Derek C.

Reputation: 1008

Variable changes on it's own in C++

I have a loop going through an array trying to find which index is a string. It should solve for what that value should be. I can't figure out why, but as soon as the if statements start i becomes 1 which gives my code an error. I'm not very fluent in C++.

for(int i = 0; i < 4; i++) {
    if(auto value = std::get_if<std::string>(&varArr[i])) {
        solvedIndex = i;

        auto value0 = std::get_if<float>(&varArr[0]);
        auto value1 = std::get_if<float>(&varArr[1]);
        auto value2 = std::get_if<float>(&varArr[2]);
        auto value3 = std::get_if<float>(&varArr[3]);

        //i changes to 1 when this if starts??
        if(i = 0) {
            solvedVar = (*value3 / *value1) * *value2;
        } else if (i = 1) {
            solvedVar = *value3 / (*value0 / *value2);
        } else if (i = 2) {
            solvedVar = *value0 / (*value3 / *value1);
        } else {
            solvedVar = *value1 * (*value0 / *value2);
        }
        break;
    }
}

Note that these variables are declared above. Also, varArr is filled with values:

std::variant<std::string, float> varArr[4];
int solvedIndex;
float solvedVar;

Upvotes: 0

Views: 885

Answers (2)

Joseph Hansen
Joseph Hansen

Reputation: 13319

As has been noted, in your if statements, you are using the assignment operator (=) but want the equality comparison operator (==). For your variable i the first if statement sets i equal to 0 and if(0) is the same as if(false). So your program goes to the first else-if which sets i equal to 1 and if(1) evaluates to true. Your code then finishes the block within else if (i = 1) {...} and then ends.

Upvotes: 2

user10957435
user10957435

Reputation:

That's because operator= is the assignment operator in C++ (and most languages, actually). That changes the value of the variable to the value on the other side. So, for instance:

x = 0

will change the value of x to 0. Doesn't matter if it's in an if statement. It will always change the value to 0 (or whatever the right hand side value is).

What you are looking for is operator==, which is the comparison (aka relational) operator in C++/ That asks the question "Are these two things equal?" So, for instance:

x == 0

asks is x is equal to 0.

Upvotes: 2

Related Questions