std :: make_pair:“无法在初始化中将'int *'转换为'std :: pair <endpointaddr *,endpointaddr * =”“> *'</endpointaddr *,>

时间:2013-04-11 17:31:30

标签: c++ c++11 std-pair

在下面列出的函数中,我正在尝试创建一个指向std :: pair对象的指针,其中我收到此消息底部显示的编译错误(相关的行号已在下面的代码片段中标记)。你能告诉我这段代码有什么问题吗?感谢。

 void 
 XXX::addSubscription(EndPointAddr* ptrRequesterServiceAddr, 
                      EndPointAddr* ptrRequestedServiceAddr)
 {
  //LINE 908 indicated in the g++ output starts HERE
  std::pair<EndPointAddr*, EndPointAddr* > *thePair = 
  new  std::make_pair(ptrRequesterServiceAddr, ptrRequestedServiceAddr);

  mServiceSubscriptionsList.push_back(thePair); 
 }  

编译输出:

 ../XXX.cpp: 
 In member function ‘void XXX::addSubscription(EndPointAddr*, EndPointAddr*)’:
 ../XXX.cpp:908:59: error: expected type-specifier
 ../XXX.cpp:908:59: error: cannot convert ‘int*’ to ‘std::pair<EndPointAddr*, EndPointAddr*>*’ in initialization
 ../XXX.cpp:908:59: error: expected ‘,’ or ‘;’

3 个答案:

答案 0 :(得分:2)

std::pair<EndPointAddr*, EndPointAddr* > *thePair = 
  new  std::make_pair(ptrRequesterServiceAddr, ptrRequestedServiceAddr);
            ^^^^^^

应该是

std::pair<EndPointAddr*, EndPointAddr* > *thePair = 
  new  std::pair<EndPointAddr*, EndPointAddr*>(ptrRequesterServiceAddr, ptrRequestedServiceAddr);
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

std::make_pair是一个功能。您正在尝试为函数指定std::pair指针。

答案 1 :(得分:1)

您需要使用构造函数而不是make对而不是std :: make_pair

  std::pair<EndPointAddr*, EndPointAddr* > *thePair = 
  new  std::pair<EndPointAddr*, EndPointAddr* >(ptrRequesterServiceAddr, ptrRequestedServiceAddr);

答案 2 :(得分:0)

您的示例代码未显示有助于了解的mServiceSubscriptionsList类型。

试试这个:

void 
 XXX::addSubscription(EndPointAddr* ptrRequesterServiceAddr, 
                      EndPointAddr* ptrRequestedServiceAddr)
 {
  //LINE 908 indicated in the g++ output starts HERE
  std::pair<EndPointAddr*, EndPointAddr* > thePair = 
  std::make_pair(ptrRequesterServiceAddr, ptrRequestedServiceAddr);

  mServiceSubscriptionsList.push_back(thePair); 
 }