我正在努力寻找以下代码无法编译的充分理由。 它给了我以下错误。
Error 2 error C2923: 'std::pair' : 'std::set::iterator' is not a valid template type argument for parameter '_Ty1'
我需要了解一下为什么 C++ 不允许我在函数声明中使用模板参数,因为我使用 set< int >::iterator 而不是 set< T >::iterator 程序可以工作.
#include<iostream>
#include<set>
using namespace std;
template <typename T>
void print(const pair< set<T>::iterator, bool> &p) //<- Here is the problem
{
cout<<"Pair "<<*(p.first)<<" "<<p.second<<"\n";
}
int main() {
set<int> setOfInts;
setOfInts.insert(10);
pair<set<int>::iterator, bool > p = setOfInts.insert(30);
}
最佳答案
您只需要“typename”关键字。由于您的 print 函数是用 T 模板化的,因此您必须告诉编译器 set::iterator 不是值而是类型。就是这样。
#include<iostream>
#include<set>
#include <utility>
using namespace std;
template <typename T>
void print(const pair< typename set<T>::iterator, bool> &p) //<- Here is the problem
{
cout<<"Pair "<<*(p.first)<<" "<<p.second<<"\n";
}
int main() {
set<int> setOfInts;
setOfInts.insert(10);
pair<set<int>::iterator, bool > p = setOfInts.insert(30);
}
关于c++ - 不能在函数声明中使用模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7547068/