为什么我得到一个类型值不匹配
Why am I getting a type value mismatch?
我正试图在我的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来抑制编译错误,但没有成功。
您应该指定std::list<std::shared_ptr<SelfDefinedType>>::iterator
是一个类型。
这里iterator
嵌套在std::list<std::shared_ptr<SelfDefinedType>>
中,SelfDefinedType是一个模板参数。
解析器假设迭代器不是类型,除非您用typename显式地告诉它。
要解决错误(请注意类型名称):
std::vector<typename std::list<std::shared_ptr<SelfDefinedType>>::iterator> edge_iters;
我不确定这是问题所在,但编译器可以将其理解为运算符>>。
尝试std::vector<std::list<std::shared_ptr<SelfDefinedType>:迭代器>edge_iters;
相关文章:
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 更改可变参数模板中的最后一个类型
- 如何构造一个类型特征,可以判断一个类型的私有方法是否可以在另一个类型的构造函数中调用?
- 有没有办法同时将一个类型分配给C++中的多个模板?
- C++:可以模板化一个类型名称吗
- 有没有一种方法可以使用SFINAE来检测一个类型是否实现了给定的抽象基类
- 给定一个类型为 Container:<T>:Iterator 的函数参数,如何为某些类型的 T 实现特定的重载?
- 期望一个类型,得到一个模板
- 初始化一个类型向量的巨大向量<int>
- 我可以使用预处理器将一个类型声明替换为另一个类型声明吗?
- 具有多种类型的类数组?如何访问数组中的一个类型
- Opencv C++ 声明一个类型为 uint8 的矩阵
- 模板参数列表中只有一个类型名称是什么意思?
- C++模板部分特化:为什么我无法匹配可变参数模板中的最后一个类型
- 为什么我们有一个类型不匹配
- 在函数模板中将一个类型名映射到另一个类型名
- 创建一个类型bool的向量,其中所有值均可初始化为true
- 在C API中定义了一个类型,如何将其与命名空间中的C++类相关联