【发布时间】:2020-02-06 19:10:00
【问题描述】:
问题:
我试图在编译时将类的实例插入到 std::map 中,但总是出现以下错误。
main.cpp:18:12: error: ‘_info’ was not declared in this scope
_info(1)
^
第 18 行指向下面的代码块
15. std::map<std::string, Info > lookup {
16. {
17. "aclk",
18. _info(1)
19. }
20. };
代码:
#include <random>
#include <iostream>
#include <functional>
#include <map>
class Info{
int _info;
public:
Info(int info){
_info = info;
}
};
std::map<std::string, Info > lookup {
{
"aclk",
_info(1)
}
};
int main()
{
//dummy
}
观察:
当我动态创建对象时,我看不到任何此类错误。
const std::map<std::string, Info > lookup {
{
"aclk",
new Info(1)
}
};
但是映射为const 并使用new 插入实例没有任何意义。
【问题讨论】:
-
lookup不是Info的成员函数,因此它不知道任何名为_info的东西。如果要创建Info类型的对象,则应使用该名称:{"aclk", Info(1)}。 -
为什么不直接
{ "aclk", Info(1) }或直接{ "aclk", 1 }?
标签: c++ class dictionary constructor initialization