关于c ++:为什么我的类型值不匹配?


Why am I getting a type value mismatch?

本问题已经有最佳答案,请猛点这里访问。

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

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

SelfDefinedType是一个类,我在这个片段的上方声明了它。

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

我得到下面的编译时错误,用C++ 11编译。

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

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

我试图在开始和结束括号中添加空格,但没有用。我还尝试使用typedef来抑制编译错误,但这不起作用。


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

这里,iterator嵌套在std::list>中,self-definedType是一个模板参数。

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

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

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

我不确定这是否是问题所在,但您的编译器可以将其理解为operator>>。

尝试std::vector>:迭代器>边器;