模板类中新结构的C++语法

C++ Syntax for new Struct in Templated Class

本文关键字:结构 C++ 语法 新结构      更新时间:2023-10-16

我在成员函数定义中遇到一些代码问题。

来自.h文件:

//This is a private type
struct node {
node   *next;
node   *prev;
T      *o;
}; 

.cpp文件中产生错误的代码:

template <typename T>
void Dlist<T>::function(T *o)
{
node newV = new node;
....
}

我认为这是声明结构的正确语法,但我得到了一个"在此范围内未声明节点"错误。

然后我尝试了:

Dlist<T>::node *victim;

我得到了一个"newV没有在这个范围内声明"的错误,这让我更加困惑,因为这行本身就是一个声明。

我将.cpp包含在.h文件中。

感谢您的帮助。

new X返回指向X的指针,因此需要将对new node的调用结果分配给node*,而不是node:

template <typename T>
void Dlist<T>::function(T *o)
{
node* newV = new node;
....
}

请参阅此处的示例。

请注意,使用指向动态分配对象的原始指针是非常棘手的,并且必然会导致内存管理错误。我建议使用智能指针或自动分配的变量(非指针)。

struct node {
std::unique_ptr<node>   next;
std::unique_ptr<node>   prev;
std::unique_ptr<T>      o;
};