C++ size_type 没有命名类型

C++ size_type does not name a type

在尝试创建一个函数来计算向量的长度时,我遇到了第 2 行的 error: 'size_type' does not name a typesize_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();