我使用的函数在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
谢谢,
尤尼斯
答案 0 :(得分:2)
不确定这是唯一的问题,但是......用
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吗?
答案 1 :(得分:0)
The answer that I find is to use make_tuple in the return of the definition of the function;
return std::make_tuple(std::move(even), // std::move() prevents from
std::move(odd), // copying existing locals
std::move(length)); // to tupl
Besides, when calling the function use : auto data=s4prc::manyResults(big); and get the three compounents of data with :
std::cout << ">>> evenStr=" << std::get<0>(data) << '\n';
std::cout << ">>> oddStr=" << std::get<1>(data) << '\n';
std::cout << ">>> totalLength=" << std::get<2>(data) << '\n';