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

时间:2012-12-09 09:44:37

标签: c++ class templates struct

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

来自.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文件中。

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

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

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

查看示例here

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

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