问题描述
谁能解释一下为什么会出现这个编译错误。
错误:函数模板“std::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;
}
解决方法
检查 range-for-loop 定义:
for ( range_declaration : range_expression ) loop_statement
这里的 range_declaration
需要是一个声明。 std::tie(str1,str2)
不是声明。声明类似于 int x
或 auto&& y
。
有关范围循环 https://en.cppreference.com/w/cpp/language/range-for 和 https://en.cppreference.com/w/cpp/language/declarations 的声明,请参阅 cppreference。