函数返回3个值时出错

时间:2018-03-25 12:37:17

标签: c++ c++17 auto

我使用的函数在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

谢谢,

尤尼斯

2 个答案:

答案 0 :(得分:2)

不确定这是唯一的问题,但是......用

s4prc::Noisy<std::string> evenStr;
s4prc::Noisy<std::string> oddStr;
int  totalLength;
auto [evenStr, oddStr, totalLength]=s4prc::manyResults(big);

您正在定义重新定义 evenStroddStrtotalLength。这应该会产生编译错误。

尝试删除第一个定义(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';