如何在声明时将对象插入std::map

3

问题:

我正在尝试在编译期间将一个类的实例插入到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 的 map 对象,使用 new 插入实例是毫无意义的。


1
lookup 不是 Info 的成员函数,因此它不知道任何名为 _info 的东西。如果您想创建类型为 Info 的对象,则应使用该名称:{"aclk",Info(1)} - BoBTFish
1
为什么不只是{ "aclk", Info(1) }或者简单地{ "aclk", 1 }呢? - 0x5453
1个回答

4
您需要提供一个Info类型的对象,而不是它的数据成员_info。例如:
 std::map<std::string, Info > lookup  {
  {
    "aclk",
    1
  }
};

因为类 Info 具有转换构造函数,所以这是有效的。
或者(例如构造函数为显式时)。
 std::map<std::string, Info > lookup  {
  {
    "aclk",
    Info(1)
  }
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接