我对C++很陌生,我遇到了这个错误:第2行为。我没有得到它想要告诉我的。我是否应该在第二行添加size_type
之后的其他类型?C++ size_type没有命名一个类型
template<class vecType>
size_type len(vector<vecType> inVector) {
size_type vecSize = inVector.size();
return vecSize;
}
FYI:使用gcc/g++ 4.9.2
我对C++很陌生,我遇到了这个错误:第2行为。我没有得到它想要告诉我的。我是否应该在第二行添加size_type
之后的其他类型?C++ size_type没有命名一个类型
template<class vecType>
size_type len(vector<vecType> inVector) {
size_type vecSize = inVector.size();
return vecSize;
}
FYI:使用gcc/g++ 4.9.2
让我们来看看一个普通的功能,而不是一个函数模板。
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();
尝试
vector<vecType>::size_type vecSize = inVector.size();
为什么倒票?我的回答是在上面的两条评论和g ++文档中提出的。 – user481779
“名”在这种情况下,一个动词。这意味着'size_type'不是数据类型的名称。这意味着你还没有告诉编译器'size_type'是什么。 –
'size_type'通常附加到另一个类,例如'vector :: size_type' – user4581301
相关:http://stackoverflow.com/questions/4849632/vectorintsize-type-in-c – user4581301