【问题标题】:C++ Syntax for new Struct in Templated Class模板类中新结构的 C++ 语法
【发布时间】:2012-12-09 09:44:37
【问题描述】:

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

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

感谢任何帮助。

【问题讨论】:

  • 你能发布一些重现问题的最小代码吗?

标签: c++ class templates struct


【解决方案1】:

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;
}; 

【讨论】:

  • 如果这家伙连指针都不知道,那他就没法管理自己的内存了。没有智能指针-> 否决。
  • @DeadMG 我试图解决眼前的问题。我将添加一些关于智能指针的内容。
猜你喜欢
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
  • 2012-01-08
  • 2018-04-22
相关资源
最近更新 更多