【问题标题】:Why I cannot use std::tie to unpack values from vector of pair in range based for loop为什么我不能使用 std::tie 从基于范围的对向量中解压缩值 for 循环
【发布时间】:2021-05-31 07:16:12
【问题描述】:

请有人解释一下为什么会出现这个编译错误。

错误:函数模板“std::tie”不是类型名称 这工作正常。 tie(str1,str2) = pairval;

#include<iostream>
#include<vector>
#include<tuple>

using namespace std;

int main()
{

    vector<pair<string,string>>v ={{"Hello", "Task"}};

    pair<string, string> p = {"Hello", "Task"};

    string str1, str2;

    for(auto & pairval : v)
    {
        tie(str1,str2) = pairval;
        cout<<pairval.first<<" "<<pairval.second<<endl; //working
    }

    for(auto & [str1,str2]: v)
    {
       cout<<str1<<" "<<str2<<endl; //working
    }
    
    for(tie(str1, str2):v) // compilation error : function template "std::tie" is not a type name
    {
           cout<<str1<<" "<<str2<<endl;   
    }
    return 0;
}

【问题讨论】:

  • std::tie 不是声明。基本上你的代码违反了 C++ 的语法。另外,这是 C++17,而不是 C++11(C++11 没有结构化绑定)

标签: c++ c++11 stl std-pair stdtuple


【解决方案1】:

检查 range-for-loop 定义:

for ( range_declaration : range_expression ) loop_statement

这里range_declaration 需要是一个声明std::tie(str1,str2) 不是声明。声明类似于int xauto&amp;&amp; y

请参阅 cppreference 以了解 range-for-loop https://en.cppreference.com/w/cpp/language/range-forhttps://en.cppreference.com/w/cpp/language/declarations 以了解声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 2011-10-21
    • 1970-01-01
    相关资源
    最近更新 更多