Search code examples
c++classchess

Change class variable after finding


I am currently working on a chess engine in C++, and in the engine, I'm trying to modify a string variable "piece" inside of a class "ChessTile" within another class called "ChessBoard".

Anyways when I use a function to return a class, then modify said class, it doesn't change the source variable, and I was wondering how you do that.

Here is a simple script I wrote to demonstrate:

#include <iostream>
#include <string>

class child {
private:
    int myVar;

public:
    child(int v) {
        myVar = v;
    }

    int getVar() {
        return myVar;
    }

    int setVar(int Svar) {
        this->myVar = Svar;
        return 0;
    }
};

class parent {
public:
    child baby = child(0);

    child findMyChild(int var) {
        if (var == 1) {
            return baby;
        }
    }
};

parent DAD;

int main() {
    std::cout << DAD.findMyChild(1).getVar() << std::endl;
    DAD.findMyChild(1).setVar(50);
    std::cout << DAD.findMyChild(1).getVar() << std::endl;
}

The output for this is:

0
0

But I'm wanting it to be:

0
50

If necessary, I can also post my chess engine. Thank you!


Solution

  • In your code, findMyChild() is returning a copy of the baby ( function returning by value), use return by reference instead like so.

    child& parent::findMyChild(int var) {
        if (var == 1)
        {
           return baby;
        }
        /* other codes */
        return baby; 
    }