繁体   English   中英

返回3个值的函数错误

[英]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);

你定义和重新定义 evenStroddStrtotalLength 这应该给出一个编译错误。

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM