如何在 C++ 类中使用自引用类型和别名
Posted
技术标签:
【中文标题】如何在 C++ 类中使用自引用类型和别名【英文标题】:How to use of a self reference type and using alias inside C++ class 【发布时间】:2019-02-26 07:07:38 【问题描述】:这是一个简单的代码,我尝试同时使用自引用类型和别名。
#include <iostream>
class List
private:
struct node
int data;
struct node* next;
node(const int& d=0, struct node* n=nullptr)
data = d; next = n;
~node() ;
;
using pNode = struct node*;
pNode head;
public:
List();
~List();
void print() const std::cout << head->data;
;
List::List()
head = new node55;
int main()
List *a = new List;
a->print();
上面的工作正常。但是,我宁愿启动如下所示的代码:
class List
private:
using pNode = struct node*;
struct node
int data;
pNode next;
...
我想将using pNode = struct node*
放在struct node
定义之前,这样我也可以在struct node
定义中使用它。我相信如果我不使用类,这种代码风格可以正常工作。
【问题讨论】:
避免为指针类型添加typedef
s。 const pNode
和 const node*
非常不同。
【参考方案1】:
不要在别名中隐藏指针语义。这是我总是落后的一个“从不”的建议。
如果你同意在你的代码中只使用node*
,那么你可以写
struct node
int data;
node* next;
// ..
;
C++ 引入了一个名为node
和struct node
的类型,这与C 不同。所以我们可以使用自然语法。
【讨论】:
【参考方案2】:要使用后者,您需要像这样转发声明结构节点:
struct node;
using pNode = node*;
struct node
int data;
pNode next;
;
【讨论】:
以上是关于如何在 C++ 类中使用自引用类型和别名的主要内容,如果未能解决你的问题,请参考以下文章