Передача ссылок в качестве аргументов функции не работает - PullRequest
1 голос
/ 06 октября 2019

У меня есть такой код (все сделано для минимального воспроизводимого примера):

enum class gameState{
Normal,
Special};

class Piece{
public: Vector2i position;
int shape;};

class Board{
public: int array[8][8];
std::vector<Piece> f;
Board() : f(std::vector<Piece>(32)) {}; };

void promotion(int shape, gameState &state, Board &b){
state = gameState::Special;
b.array[b.f[0].position.x][b.f[0].position.y] = shape;
b.f[0].shape = shape;};

И затем я пытаюсь вызвать их в основном:

int main(){
gameState state = gameState::Normal;
Board b;
promotion(1, state, b);
return 0;};

Проблема в том,что он, кажется, правильно передается по ссылке для объекта gameState state, он не изменяет объект Board b, чего не должно быть. Как правильно передать Board b по ссылке (или указателю)?

PS: Vector2f - это просто двумерный вектор, используемый библиотекой SFML.

1 Ответ

0 голосов
/ 06 октября 2019

На самом деле, доска в вашем коде (ПРАВИЛЬНО) передается по ссылке на функцию продвижения. Вы уверены, что это не изменилось после вызова функции? Что он печатает, если вы делаете:

int main(){
    gameState state = gameState::Normal;
    Board b;
    std::cout << b.array[b.f[0].position.x][b.f[0].position.y] <<std::endl;
    promotion(1, state, b);
    std::cout << b.array[b.f[0].position.x][b.f[0].position.y] <<std::endl;;
    return 0;
};
...