模板参数 1 对 deque 无效
Template argument 1 is invalid with deque
当我尝试编译下面的代码时,我收到以下错误。请为该问题提出一个好的解决方法。
./DataSecurity.h:60:错误:模板参数 1 无效 ./DataSecurity.h:60:错误:模板参数 2 无效 ./DataSecurity.h:60:错误:标记之前的预期非限定 id>。
template<typename E, typename C = std::basic_string<E> >
struct CDsTableRec {
typedef C CStr;
typedef Ids::Type::CCountedPointer<CDsTableRec> CPtr;
CStr m_table;
CStr m_alias;
CStr m_prefix;
CDsTableRec(const CStr& t, const CStr& a, const CStr& p) : m_table(t), m_alias(a), m_prefix(p) {}
CDsTableRec(const CStr& t) : m_table(t) {}
CDsTableRec() {}
CStr str() const {
return m_prefix + (m_alias.size() ? m_alias : m_table);
}
};
typedef std::deque<CDsTableRec::CPtr> > CTableList;
---此行给出错误
CCountedPointer
也是一个模板
Ids
和Type
是命名空间
-
CDsTableRec
模板,则需要为其提供模板参数。 -
这条线上的许多人都有
>
。 -
CDsTableRec<X>::CPtr
是一个依赖名称,因此您还需要一个typename
。(请参阅"我必须在何处以及为什么必须放置"模板"和"类型名"关键字?
因此,完整且可能有效的声明看起来像
typedef std::deque<typename CDsTableRec<X>::CPtr> CTableList;
例如X
在哪里 int
或类/结构名称或任何其他有效类型。
如果CTableList
也需要是模板,则不能使用typedef
,无法使用typedef
创建模板化类型别名。相反,您需要使用 using
关键字来声明模板类型别名:
template<typename T>
using CTableList = std::deque<typename CDsTableRec<T>::CPtr>;
请注意,这是在 C++11 标准中引入的。如果你有一个不支持C++11(或更高标准)的旧编译器,那么你必须重新考虑你的设计。
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 无法访问嵌套类.类的使用无效
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 如何解决错误:SCIP C++中的 SCIP 阶段无效 <10>
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题
- FFMPEG配置文件级别id大小无效
- 错误:从"int"到枚举c++的转换无效
- 如何修复此错误:className::className的无效使用
- Capacity of a deque
- 为什么将值返回函数传递给重载=运算符对运算符函数有效,而对其他运算符无效
- C++-模板嵌套类的引用初始化无效
- 错误:无效的预处理指令 #i 的意思是 #if?
- 多维数组 C++ 中数组下标的类型"int[int]"无效
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- 从 'int' 到 'int*' CPP 的转换无效
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 由于无效的 ValidateRgn() 子窗口不会收到WM_PAINT消息
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- 模板参数 1 对 deque 无效
- 具有deque的随机访问迭代器的迭代器无效