我在成员函数定义中遇到了一些代码问题。
来自.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文件中。
感谢任何帮助。
答案 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;
};