考虑以下代码。 在我的真实情况下,我有这样的事情:
typedef enum
{
vehicle,
computer,
} Article;
这就是我要构造的:
enum class status{
notPaid,
paid,
};
struct S {
status status_vehicle;
status status_computer;
std::map<Article, status> mymap =
{
{vehicle, S::status_vehicle},
{computer, S::status_computer},
};
};
int main ()
{
Article a1 = vehicle;
S::mymap.at(a1) = status::paid; // this line doesn't work
}
但是,最后一行(S::mymap.at(a1) = status::paid
;)不起作用。我尝试了不同的方法,例如使用find()
的{{1}}函数。我收到错误“在只读对象中分配成员std::map
”。
有人知道怎么做吗?另外也许如何以更好的方式设计整体? (整个过程来自“这就是我要构建的行”)。
另外,我宁愿使用std::pair<Article, status>::second
代替unordered_map
,但无法正常工作。谢谢
答案 0 :(得分:1)
因为mymap
不是静态的。
您可以这样做:
Article a1 = vehicle;
struct S mystruct;
mystruct.mymap.at(a1) = status::paid;
或将static
添加到结构中的成员:
struct S {
status status_vehicle;
status status_computer;
static std::map<Article, status> mymap;
};
但是当使用静态时,必须在mymap
的声明外部初始化struct S
以及不能使用struct的非静态成员的成员
std::map<Article,status> S::mymap={
{vehicle,S::status_vehicle}
};
该类的所有对象共享一个静态成员。所有静态数据 如果没有其他对象,则在创建第一个对象时将其初始化为零 存在初始化
从逻辑上讲,在您的示例中效果不佳
答案 1 :(得分:0)
由于myMap
是非静态的,因此无法像静态变量一样分配它。
您可以这样更改代码:
int main ()
{
Article a1 = vehicle;
S ss;
ss.mymap.at(a1) = status::paid;
}