c++ - 缺少别名模板的 C++ 参数列表
问题描述
我在“ListNode.h”中使用“别名模板”,代码如下:
注:我使用的IDE是visual studio 2019
//ListNode.h
#ifndef DSACPP_LIST_LISTNODE_H_
#define DSACPP_LIST_LISTNODE_H_
typedef int Rank;
template<class T>
class ListNode
{
private:
T data_;
ListNodePosi pred_; ListNodePosi succ_;
public:
ListNode() {};
ListNode(T e, ListNodePosi pred = NULL, ListNodePosi succ = NULL)
: data_{ e }, pred_{ p }, succ_{ succ } {}
ListNodePosi insertAspred(T const& e);
};
// alias template
template<typename T>
using ListNodePosi = ListNode<T>*;
template<class T>
ListNodePosi ListNode<T>::insertAspred(T const& e)
/*
-⭐ there will be a error: argument list for alias template "ListNodePosi" is missing
*/
{
...
}
#endif
我不知道如何解决这个错误。所以我在这里寻求你的帮助。非常感谢您的回答。
解决方案
与类模板非常相似(在非推导的 C++17 上下文中),您需要在使用别名模板时显式提供模板参数列表。
ListNodePosi<single-type-template-argument> ...;
但是,您的程序包含其他几个错误:
- 在
ListNode
类模板的声明和定义中,名字ListNodePosi
还不知道,但是被使用了, ListNode
ctor(带参数的重载)在其成员初始化列表中进行p
初始化时pred_
引用:这应该引用pred
.- 更喜欢使用
nullptr
overNULL
(您实际上需要包含一些<c...>
标题才能访问NULL
,而nullptr
指针文字本身就是作为关键字)。
您可以通过从前向声明 to 开始修复上面的第一个项目符号ListNode
,然后是别名模板的声明ListNodePosi
(因为它不需要ListNode
完整),最后ListNode
是使用别名模板的定义。
例如:
template <typename T> class ListNode;
template <typename T> using ListNodePosi = ListNode<T> *;
template <class T> class ListNode {
private:
T data_;
ListNodePosi<T> pred_;
ListNodePosi<T> succ_;
public:
ListNode(){};
ListNode(T e, ListNodePosi<T> pred = nullptr, ListNodePosi<T> succ = nullptr)
: data_{e}, pred_{pred}, succ_{succ} {}
ListNodePosi<T> insertAspred(T const &e);
};
template <typename T> ListNodePosi<T> ListNode<T>::insertAspred(T const &e) {
/* ... */
}
推荐阅读
- databricks - 有没有一种方法可以在 Databricks 中描述 Key Vault 支持的范围,以了解它指向哪个 Key Vault?
- react-native - nsnumber 类型的 json 值“1”无法转换为 uiedgeinsets
- django - Django+gunicorn+nginx上传大文件连接重置错误
- angular8 - 如何在Angular 8上的可点击项目上使用调用函数?
- docker-compose - 将日志配置添加到 docker-compose 后磁盘操作量增加
- python - 如何遍历列表并更改其中的值?
- python - Python:如何以两个参数作为参数传递函数
- ios - IOS,如果我有 GMSMapView,如何在 didtap 或 didDrag 之后删除地图的自动动画
- javascript - 如何根据先前的单选选择禁用单选按钮
- python - 如何防止熊猫访问器发出覆盖警告?