为什么类型值不匹配? 我试图在C++应用程序中生成迭代器向量: std::vector<std::list<std::shared_ptr<SelfDefinedType>>::iterator> edge_iters;

为什么类型值不匹配? 我试图在C++应用程序中生成迭代器向量: std::vector<std::list<std::shared_ptr<SelfDefinedType>>::iterator> edge_iters;,c++,C++,这是什么意思?它似乎将std::list::iterator视为一个值而不是一个类型。为什么? 我试图在开始和结束括号中添加空格,但没有效果。我还尝试使用typedef来抑制编译错误,但没有成功。我不确定这是否是问题所在,但这可以被编译器理解为操作符>> 试一试 std::vector> 试一试 std::vector

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


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

我不确定这是否是问题所在,但这可以被编译器理解为操作符>>

试一试
std::vector>::迭代器>边缘

我不确定这是否是问题所在,但这可以被编译器理解为操作符>>

试一试
std::vector>::迭代器>边缘

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

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

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

要解决此错误(请注意类型名),请执行以下操作:

std::向量边缘;

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

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

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

要解决此错误(请注意类型名),请执行以下操作:

std::向量边缘;

是否忘记包含标题?(您的代码与其他代码有何不同)。通常,当您忘记了
typename
时会出现此错误,但我看不到代码。另外,请显示整个错误。建议:小心使用无效的迭代器。我包括了
。这就足够了,对吗?App.hpp中的第563行是什么?“为什么?”我最好的猜测是某个地方缺少了
typename
,但你真的必须显示导致此错误的代码,以便任何人告诉你它导致错误的原因。忘记包含标题了吗?(您的代码与其他代码有何不同)。通常,当您忘记了
typename
时会出现此错误,但我看不到代码。另外,请显示整个错误。建议:小心使用无效的迭代器。我包括了
。这应该足够了,对吧?App.hpp中的第563行是什么?“为什么?”我最好的猜测是某个地方缺少了
typename
,但你确实必须显示导致此错误的代码,以便任何人告诉你它导致错误的原因。
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::vector<typename std::list<std::shared_ptr<SelfDefinedType>>::iterator> edge_iters;