如何使用自引用类型并在C ++类中使用别名
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用自引用类型并在C ++类中使用别名相关的知识,希望对你有一定的参考价值。
这是一个简单的代码,我尝试使用自引用类型并同时使用别名。
#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 node{55};
}
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
定义中使用它。我相信如果我不使用类,这种代码风格可以正常工作。
答案
不要在别名中隐藏指针语义。这是我永远落后的一个“永不”的建议。
如果你同意只在你的代码中使用node*
,那么你可以写
struct node {
int data;
node* next;
// ..
};
C ++引入了一个名为node
和struct node
的类型,与C不同。所以我们可以使用自然语法。
另一答案
要使用后者,您需要转发声明结构节点,如下所示:
struct node;
using pNode = node*;
struct node {
int data;
pNode next;
};
以上是关于如何使用自引用类型并在C ++类中使用别名的主要内容,如果未能解决你的问题,请参考以下文章