Node
这是一个包含 anint data
和 a的链表结构的示例NodePtr next
。
我的想法是使用 a typedef
,NodePtr
因为我想试验原始指针与 shared_ptr。另外,为了简单起见,我希望能够只更改一条线以从一条线转到另一条线。
使用原始指针,以下代码编译得很好。
typedef struct Node* NodePtr;
struct Node {
int data;
NodePtr next;
};
但是,如果我只是将 typedef 更改为 shared_ptr,就会出现编译错误。
typedef std::shared_ptr<Node> NodePtr;
struct Node {
int data;
NodePtr next;
};
error: ‘Node’ was not declared in this scope
error: template argument 1 is invalid
我可以通过前向声明来解决这个问题Node
。但是,对我来说,双重定义Node
看起来有点难看。
struct Node;
typedef std::shared_ptr<Node> NodePtr;
struct Node {
int data;
NodePtr next;
};
那么,为什么第一个typedef
工作正常,而第二个却不行呢?而且,是否可以typedef shared_ptr
不使用前向声明?