Изменение переменной внутри структуры, внутри ключа карты, из другого файла cpp - PullRequest
0 голосов
/ 13 октября 2018

Я новичок в C ++, поэтому я не уверен, правильно ли я поступаю, но мой вопрос:

Как я могу получить доступ и изменить переменную, которая определена внутриструктура, которая находится внутри карты, из другого файла .cpp?

Часть моего файла .h:

struct Borough {
    std::string name = "";
    int num_players = 0;
    Borough(std::string n) : name(n) {}
    friend inline bool operator< (const Borough& lhs, const Borough& rhs){ return (lhs.name < rhs.name); }
    friend inline bool operator==(const Borough& lhs, const Borough& rhs){ return (lhs.name == rhs.name); }
};

class Graph {
public:
    typedef std::map<Borough, Vertex *> vmap;
    vmap walk;
};

И (часть) файла player.cpp:

#include <iostream>
#include <stack>
#include "player.h"

void Player::move() {
    std::string current_loc = get_location();
    std::cout << "\nWhere do you want to move to?" << std::endl;
    display_branches(current_loc);

    std::string selected_location;
    std::getline(std::cin, selected_location);

    // verification and placement of player:
    if (verify_location(current_loc, selected_location)) {
        set_location(selected_location);
        // HERE IS WHERE I WANT TO MAKE Borough::num_players++;
        std::cout << m_graph.walk.find(selected_location)->first.num_players << " <-- That's the number of players.\n";
    }
}

Я знаю, что могу отобразить число, но я хочу изменить его, увеличивая на +1, когда игрок успешно "перемещается" туда.

1 Ответ

0 голосов
/ 13 октября 2018
Тип ключа

std::map всегда равен const, потому что было бы ошибкой изменять ключ таким образом, чтобы он мог изменить свое правильное местоположение на карте (дереве).

Новажна только та часть, которая влияет на местоположение на карте.std::map не может этого знать, но в вашем случае сравнение по городу включает только name, а не num_players.

Самый простой способ исправить это - пометить num_players как mutable:

mutable int num_players = 0;

Тогда вы сможете изменить это значение даже в const Borough.Это не повредит ничему, если ваши компараторы по Боро не зависят от num_players.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...