gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:26:28 25 4
gpt4 key购买 nike

我在处理成员函数定义中的某些代码时遇到问题。

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

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

感谢任何帮助。

最佳答案

new X 返回一个指向 X 的指针,因此您需要将对 new 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;
};

关于模板类中新结构的 C++ 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13786353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com