如何使用make_pair创建id和struct(对象)对?

sol*_*lti 4 c++ c++11

我试图像这样创建一对id和object:

 #include <iostream>
  #include <utility>
  #include <functional>

  struct num{

      double x;
      double y;

  };


  int main(){

      auto tmp = std::make_pair(1, {1.0, 2.0});

 }
Run Code Online (Sandbox Code Playgroud)

我得到错误 error: no matching function for call to 'make_pair(int, <brace-enclosed initializer list>)'

有没有一种正确的方法来创建id和对象?

Hum*_*awi 7

不,这是你应该如何创建你的对:

auto tmp = std::make_pair(1, num{1.0, 2.0});
Run Code Online (Sandbox Code Playgroud)

或者(正如@StoryTeller提到的那样):

std::pair<int,num> tmp {1, {1.0, 2.0}};
Run Code Online (Sandbox Code Playgroud)

现在,在这两种情况下,编译器都有一个线索,{1.0, 2.0}它应该是一个初始化器num.

  • 使用`make_pair`时不要指定模板参数,在这种情况下只需使用`pair`构造函数 (3认同)
  • @solti首先,它的输入较少.然后有这样的情况,事情不会编译`int i = 1; auto tmp = std :: make_pair <int,num>(i,{1.0,2.0});`因为定义了`make_pair`.引用STL - [不帮助编译器](https://www.youtube.com/watch?v=AKtHxKJRwp4) (3认同)