0

我正在尝试在我的 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 来抑制编译错误,但没有奏效。

4

2 回答 2

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;
于 2013-02-19T21:58:44.770 回答
0

我不确定这是不是问题,但这可以被您的编译器理解为 operator>>。

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

于 2013-02-19T08:40:32.207 回答