0

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

来自 .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 is not declared in this scope”错误,这让我更加困惑,因为该行本身就是一个声明。

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

任何帮助表示赞赏。

4

1 回答 1

2

new X返回指向 an 的指针X,因此您需要将调用的结果分配new node给 a node*,而不是 a 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;
}; 
于 2012-12-09T09:56:28.993 回答