【问题标题】:Can I use a variable in destructor that is not defined in the header file?我可以在析构函数中使用头文件中未定义的变量吗?
【发布时间】:2015-12-27 17:14:24
【问题描述】:

我一直在从我的一个班级阅读这段代码。并且对析构函数中的一个变量感到非常困惑。这是代码,顺便说一句,这是一个链表头文件。而我认为没有定义但使用的变量是n;

#include <iostream>

using namespace std;


class LinkedList
{
private:

  struct node
  {
     int info;
     node * next;
  };

  typedef node * nodeptr;

  nodeptr start;

  int count;


public:

       // Constructor

   LinkedList()
   {
      start = NULL;
      count = 0;
   }

       // Destructor

   ~LinkedList()
   {
      nodeptr p = start, n;

      while (p != NULL)
      {
         n = p;
         p = p->next;
         delete n;
      }
   }

第一次出现这个 n 来自该行
nodeptr p = 开始,n; 所以请教我为什么使用这样的变量是合法的。任何命令表示赞赏。

谢谢

【问题讨论】:

  • “我认为没有定义但使用的变量是n”。但是nodeptr p = start, n; 行是n! 的定义
  • p和n都是nodeptr类型,有什么问题!

标签: c++ linked-list destructor


【解决方案1】:

在 C++ 语言中(就像在 C 中一样),每个声明都可以包含多个声明符。例如

int a, b, c;

声明(并定义)三个变量:a、b 和 c,类型为 int。您可以选择将初始化程序添加到某些声明符(或所有声明符)

int a = 5, b, c;

你的

nodeptr p = start, n;

完全一样。它声明(并定义)两个变量:p 和 n。 p 有一个初始化器,n 没有。所以,你断言n 是“未定义”显然是不正确的。

【讨论】:

    【解决方案2】:

    不,它已定义。

    nodeptr p = start, n; 定义了 2 个变量,p 和 n。而p由start初始化,而n则不是。

    【讨论】:

      【解决方案3】:

      在一行代码中声明多个变量是完全合法的。但是请注意,在您的示例中,start 和 n 都是 nodeptr 类型。但是你不能有这样的东西: int a,float b,double c; //这是非法的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-14
        • 2020-05-13
        • 1970-01-01
        • 1970-01-01
        • 2017-09-21
        • 1970-01-01
        • 2015-01-03
        相关资源
        最近更新 更多