使用函数的元组返回多个值的问题



嗨,在四处寻找从一个函数返回两个值的方法后,我创建的一个返回多个值的函数遇到了一些问题,但我似乎仍然从这个函数中得到了错误。我使用此网站作为参考:https://en.cppreference.com/w/cpp/utility/tuple并且正在运行默认版本(最新版本的c++17(。

#include <tuple>
std::tuple<int, int> returnCoordinates() 
{
int xCoordinate = -2;
int yCoordinate = 2;
return {xCoordinate, yCoordinate}; //can only do in c++ 17 
}
int main()
{
int xCoordinate;
int yCoordinate;
auto[xCoordinate, yCoordinate] = returnCoordinates(); //only works c++17
return 0;
}

我得到的错误是"表达式必须有一个常量值——xCordinate的值不能声明为常量",我不太清楚为什么编辑:根据一位评论者的建议,我删除了xCordinate和yCordinate的声明,但现在似乎是在说xCordinatte和yCordinate是未定义的。然而,如果我切换出这行代码:

auto[xCoordinate, yCoordinate] = returnCoordinates(); //only works c++17

这个:

std::tie(xCoordinate, yCoordinate) = returnCoordinates();

这似乎奏效了,我只是对为什么会这样感到困惑,对我的任何误解表示歉意。

多亏了M.M和NathanOliver的评论者,我终于弄清楚了问题所在。首先,我删除了我最初的声明:

int xCoordinate;
int yCoordinate;

作为:

auto[xCoordinate, yCoordinate] = returnCoordinates(); //only works c++17

声明新变量。

此外,我没有使用最新的c++编译器。要更改,请转到项目->属性->C/C++->语言->C++语言标准->预览-最新C++工作草案中的功能(/std::C++Latest(默认设置意味着将弹出以下代码的错误:然而,除此之外,此代码现在可以工作:

#include <tuple>
std::tuple<int, int> returnCoordinates() 
{
int xCoordinate = -2;
int yCoordinate = 2;
return {xCoordinate, yCoordinate}; //can only do in c++ 17 
}
int main()
{
auto[xCoordinate, yCoordinate] = returnCoordinates(); //only works c++17
return 0;
}

最新更新