我可以在析构函数中使用头文件中未定义的变量吗?

Can I use a variable in destructor that is not defined in the header file?

我一直在从我的 class 中阅读这段代码。并且对析构函数中的一个变量感到非常困惑。这是代码,顺便说一句,这是一个链表头文件。我认为未定义但使用的变量是 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; 所以请教我为什么这样使用变量是合法的。任何命令表示赞赏。

谢谢

不,已经定义了。

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

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

int a, b, c;

声明(并定义)三个变量:abc 类型 int。您可以选择向某些声明符(或所有声明符)添加初始值设定项

int a = 5, b, c;

你的

nodeptr p = start, n;

完全一样。它声明(并定义)两个变量:pnp 有一个初始值设定项,n 没有。所以,你断言 n 是 "not defined" 显然是不正确的。

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