代码如下:
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>'
//==============================
求指导。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在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
,除非有特别的需求。