C++ size_type 没有命名类型
C++ size_type does not name a type
在尝试创建一个函数来计算向量的长度时,我遇到了第 2 行的 error: 'size_type' does not name a type
。size_type
不是一个类型吗?命名一个类型到底是什么意思?
template<class vecType>
size_type len(vector<vecType> inVector) {
size_type vecSize = inVector.size();
return vecSize;
}
仅供参考:使用 gcc/g++ 4.9.2
尝试
vector<vecType>::size_type vecSize = inVector.size ();
让我们看一下常规函数,而不是函数模板。
int add_two(int in)
{
return (in + 2);
}
函数名前的int
是return类型。如果编译器不能确定它代表一个类型,它会将其报告为错误。如果你打错了,写了
imt add_two(int in)
{
return (in + 2);
}
编译器会抱怨 imt
不是类型。
函数模板还必须具有 return 类型。你有:
template<class vecType>
size_type len(vector<vecType> inVector) {
size_type vecSize = inVector.size();
return vecSize;
}
在这里,函数名称前有 size_type
。如果编译器不能确定 size_type
确实是一个类型,它就会报错。如果 size_type
是已知类型,编译器将继续使用该类型作为函数的 return 类型。
您可以使用:
template<class vecType>
typename std::vector<vecType>::size_type len(vector<vecType> inVector) {
...
}
让编译器知道 std::vector<vecType>
有一个名为 size_type
的类型,并且该函数的 return 值就是该类型。您将需要使用 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();
在尝试创建一个函数来计算向量的长度时,我遇到了第 2 行的 error: 'size_type' does not name a type
。size_type
不是一个类型吗?命名一个类型到底是什么意思?
template<class vecType>
size_type len(vector<vecType> inVector) {
size_type vecSize = inVector.size();
return vecSize;
}
仅供参考:使用 gcc/g++ 4.9.2
尝试
vector<vecType>::size_type vecSize = inVector.size ();
让我们看一下常规函数,而不是函数模板。
int add_two(int in)
{
return (in + 2);
}
函数名前的int
是return类型。如果编译器不能确定它代表一个类型,它会将其报告为错误。如果你打错了,写了
imt add_two(int in)
{
return (in + 2);
}
编译器会抱怨 imt
不是类型。
函数模板还必须具有 return 类型。你有:
template<class vecType>
size_type len(vector<vecType> inVector) {
size_type vecSize = inVector.size();
return vecSize;
}
在这里,函数名称前有 size_type
。如果编译器不能确定 size_type
确实是一个类型,它就会报错。如果 size_type
是已知类型,编译器将继续使用该类型作为函数的 return 类型。
您可以使用:
template<class vecType>
typename std::vector<vecType>::size_type len(vector<vecType> inVector) {
...
}
让编译器知道 std::vector<vecType>
有一个名为 size_type
的类型,并且该函数的 return 值就是该类型。您将需要使用 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();