C ++ size_type没有命名类型

时间:2017-03-17 01:57:56

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

我对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; }

2 个答案:

答案 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 ();