【问题标题】:C++ size_type does not name a type [duplicate]C ++ size_type没有命名类型[重复]
【发布时间】:2020-07-08 01:48:19
【问题描述】:

在尝试创建一个计算向量长度的函数时,我在第 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

【问题讨论】:

标签: c++ templates g++ codeblocks return-type


【解决方案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&lt;vecType&gt; 有一个名为size_type 的类型,并且该函数的返回值就是该类型。您将需要使用typename std::vector&lt;vecType&gt;::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】:

    试试

    vector<vecType>::size_type vecSize = inVector.size ();
    

    【讨论】:

      猜你喜欢
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 2020-11-21
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多