为什么我得到一个类型值不匹配

Why am I getting a type value mismatch?

本文关键字:一个 类型 不匹配 为什么      更新时间:2023-10-16

我正试图在我的C++应用程序中创建一个迭代器向量:

std::vector<std::list<std::shared_ptr<SelfDefinedType>>::iterator> edge_iters;

SelfDefinedType是我在这个代码段上方的某个地方声明的一个类。

我必须承认这个组织有点复杂,但模板有一个层次结构。

我在用C++11编译时遇到以下编译时错误。

App.hpp:563:48: error: type/value mismatch at argument 1 in template 
parameter list for ‘template<class _Tp, class _Alloc> class std::vector’

这是什么意思?它似乎将std::list<std::shared_ptr<SelfDefinedType>>::iterator视为一个值而不是一个类型。为什么?

我试着在括号的开头和结尾加空格,但没有用。我还尝试使用typedef来抑制编译错误,但没有成功。

您应该指定std::list<std::shared_ptr<SelfDefinedType>>::iterator是一个类型。

这里iterator嵌套在std::list<std::shared_ptr<SelfDefinedType>>中,SelfDefinedType是一个模板参数。

解析器假设迭代器不是类型,除非您用typename显式地告诉它。

要解决错误(请注意类型名称):

std::vector<typename std::list<std::shared_ptr<SelfDefinedType>>::iterator> edge_iters;

我不确定这是问题所在,但编译器可以将其理解为运算符>>。

尝试std::vector<std::list<std::shared_ptr<SelfDefinedType>:迭代器>edge_iters;

相关文章: