开发者社区 问答 正文

定义链表节点出现问题了,不写不知道,一写吓一跳。:报错

代码如下:

template<typename _type>
typedef struct _node 
{
	_type   m_Type;
	_node   *m_pNext;
}Node, *LPNode;

在vs2010下提示如下错误:

1>f:\code\minilist\minilist\minilist.cpp(7): error C2823: a typedef template is illegal

1>f:\code\minilist\minilist\minilist.cpp(11): error C2988: unrecognizable template declaration/definition

1>f:\code\minilist\minilist\minilist.cpp(11): error C2059: syntax error : '<end Parse>'

//==============================
求指导。

展开
收起
kun坤 2020-06-14 09:37:29 583 分享 版权
阿里云 AI 助理回答

在C++中,您不能直接在一个typedef声明中使用模板(template)。您的代码试图定义一个结构体 _node 并同时使其成为一个具有模板参数 _type 的类型定义,这是不允许的。正确的做法是先定义一个模板结构体,然后再为它提供一个typedef别名。修改后的代码如下:

template <typename _type> // 模板声明放在前面
struct Node 
{
    _type   m_Type;
    Node*   m_pNext; // 为了清晰,这里也建议使用Node而不是_node
};

typedef Node<> *LPNode; // 为Node模板的无类型参数实例提供一个typedef别名

这样,Node 成为了一个模板结构体,可以接受一个类型参数 _type。然后我们通过 typedef Node<> *LPNode; 创建了一个指向未指定模板参数的 Node 实例的指针类型的别名。如果您想要具体类型的指针别名,比如 int 类型,可以直接写为 typedef Node<int> *LPNodeInt;

请注意,原始代码中的 _node 被替换为更符合常规命名习惯的 Node,并且去掉了非标准的前导下划线以避免潜在的命名冲突问题。另外,m_pNext 的类型从 _node 改为 Node 以匹配模板结构体的名称,并且为了遵循现代C++的编码风格,建议直接使用 Node* 而不是添加额外的指针别名 LPNode,除非有特别的需求。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
C++
问答标签:
问答地址: