我是C ++的新手,所以不确定是否要正确使用C ++,但是我的问题是:
如何从另一个.cpp文件访问和更改在映射内部的结构中定义的变量?
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;
};
#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来更改数字。
答案 0 :(得分:1)
std::map
的key_type始终为const
,因为用这样的方式修改密钥可能会出错,即它可能会更改其在地图(树)中的正确位置。
但是唯一重要的部分是影响地图中位置的部分。 std::map
没有办法知道,但是在您的情况下,自治市镇的比较仅涉及其name
而不涉及num_players
。
最简单的解决方法是将num_players
标记为mutable
:
mutable int num_players = 0;
然后,即使在const Borough
中,您也可以修改此值。只要您的自治市镇比较器不依赖num_players
,就不会有任何危害。