我试图在我的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来抑制编译错误,但是没有用。
答案 0 :(得分:3)
您应指定std::list<std::shared_ptr<SelfDefinedType>>::iterator
是一种类型。
此处iterator
嵌套在std::list<std::shared_ptr<SelfDefinedType>>
内, SelfDefinedType 是模板参数。
解析器假设迭代器不是类型,除非您使用 typename 明确告诉它。
要解决错误(请注意 typename ):
std::vector<typename std::list<std::shared_ptr<SelfDefinedType>>::iterator> edge_iters;
答案 1 :(得分:0)
我不确定这是否是问题,但这可以理解为运营商&gt;&gt;由您的编译器。
尝试 的std ::矢量&lt;的std ::列表&LT;的std :: shared_ptr的&LT; SelfDefinedType &gt; &gt; :: iterator&gt; edge_iters;