【发布时间】:2016-10-13 19:16:22
【问题描述】:
如何将std::pair<const string,int> 转换为std::pair<string,int> 而无需实际制作一对?
我尝试如下使用 static_cast:
static_cast<std::pair<const string, int>>(curr->valPair)
curr->valPair - 返回std::pair<string,int>
但它返回错误:
invalid initialization of non-const reference of type ‘std::pair<const std::basic_string<char>, int>&’ from an rvalue of type ‘std::pair<const std::basic_string<char>, int>’
[编辑:简而言之,问题是如何将std::pair<string,int> 转换为std::pair<const string,int>]
编辑2:
添加一小段代码来重现问题
#include<iostream>
using namespace std;
class A
{
std::pair<int,int> valPair;
public:
std::pair<const int,int> & getPairByReference();
};
std::pair<const int,int> & A::getPairByReference()
{
return valPair;
}
int main()
{
A a;
a.getPairByReference();
return 0;
}
编译时出现以下错误:
try-5.cpp: In member function ‘std::pair<const int, int>& A::getPairByReference()’:
try-5.cpp:15:12: error: invalid initialization of reference of type ‘std::pair<const int, int>&’ from expression of type ‘std::pair<int, int>’
【问题讨论】:
-
你能解释一下这个问题有什么问题吗?
-
您的问题缺少很多上下文。什么是 curr,错误消息提到的参考是什么等。请提供一个最小、完整和可验证的示例。 stackoverflow.com/help/mcve.
-
@Eichhörnchen - 我在问题中提到curr->valPair 是 std::pair
-
如果你把一个 X 转换成一个 Y,你就创造了一个新的 Y。你想做什么,不想做什么?
-
对不起,如果问题令人困惑..我将添加一个小测试代码。