[英]Error in function that returns 3 values
我正在使用一个函数,该函数在C ++ 17中使用元组返回3个值。
该程序是
void test_noisy()
{
s4prc::Noisy<s4prc::StrVec> big{s4prc::makeStrVec(10'000)};
std::cout << ">>> big=" << big << '\n';
s4prc::Noisy<std::string> evenStr;
s4prc::Noisy<std::string> oddStr;
int totalLength;
auto [evenStr, oddStr, totalLength]=s4prc::manyResults(big);
}
编译时,出现以下错误:
error: expected unqualified-id before ‘[’ token
auto [evenStr, oddStr, totalLength]=s4prc::manyResults(big);
^
GNUmakefile:192 : la recette pour la cible « prog.o » a échouée
谢谢,
尤内斯
不知道这是唯一的问题,但是...
s4prc::Noisy<std::string> evenStr;
s4prc::Noisy<std::string> oddStr;
int totalLength;
auto [evenStr, oddStr, totalLength]=s4prc::manyResults(big);
你定义和重新定义 evenStr
, oddStr
和totalLength
。 这应该给出一个编译错误。
尝试删除第一个定义( auto
之前的三行)。
第二:您确定要编译C ++ 17吗?
我发现的答案是在函数定义的返回中使用make_tuple。
return std::make_tuple(std::move(even), // std::move() prevents from
std::move(odd), // copying existing locals
std::move(length)); // to tupl
此外,在调用函数时,请使用:auto data = s4prc :: manyResults(big); 并获得以下三个数据分量:
std::cout << ">>> evenStr=" << std::get<0>(data) << '\n';
std::cout << ">>> oddStr=" << std::get<1>(data) << '\n';
std::cout << ">>> totalLength=" << std::get<2>(data) << '\n';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.