我对C ++很陌生,我遇到了这个错误:第2行error: 'size_type' does not name a type
。我不知道它试图告诉我的是什么。我应该在{2}之后在第2行放置另一种类型吗?
size_type
仅供参考:使用template<class vecType>
size_type len(vector<vecType> inVector) {
size_type vecSize = inVector.size();
return vecSize;
}
答案 0 :(得分:1)
让我们看一下常规函数,而不是函数模板。
int add_two(int in)
{
return (in + 2);
}
函数名称前面的int
是返回类型。如果编译器无法确定它表示类型,则会将其报告为错误。如果你有拼写错误并写了
imt add_two(int in)
{
return (in + 2);
}
编译器会抱怨imt
不是类型。
函数模板还必须具有返回类型。你有:
template<class vecType>
size_type len(vector<vecType> inVector) {
size_type vecSize = inVector.size();
return vecSize;
}
此处,您在函数名称前面有size_type
。如果编译器无法确定size_type
确实是一个类型,它会抱怨。如果size_type
是已知类型,则编译器将继续使用该类型作为函数的返回类型。
您可以使用:
template<class vecType>
typename std::vector<vecType>::size_type len(vector<vecType> inVector) {
...
}
让编译器知道std::vector<vecType>
有一个名为size_type
的类型,该函数的返回值就是那个类型。您需要使用typename std::vector<vecType>::size_type
,因为它是一个依赖类型名称。有关此主题的更多信息,请参阅Where and why do I have to put the "template" and "typename" keywords?。
此外,您必须在函数中修复变量vecSize
的声明。
template<class vecType>
typename std::vector<vecType>::size_type len(vector<vecType> inVector) {
typename std::vector<vecType>::size_type vecSize = inVector.size();
return vecSize;
}
如果能够使用C ++ 11编译器,则可以将变量声明简化为
auto vecSize = inVector.size();
答案 1 :(得分:-1)
尝试
vector<vecType>::size_type vecSize = inVector.size ();