为什么我的类型值不匹配?

时间:2013-02-19 03:32:20

标签: c++

我试图在我的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来抑制编译错误,但是没有用。

2 个答案:

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