"pointer name" 没有命名类型错误

"pointer name" does not name a type error

我是 C++ 新手。我在标记为 //this shows error 的语句上出错,但它的替代语句(标记为 but this works )出现错误。有人可以解释一下吗?

#include <bits/stdc++.h>
using namespace std;

class Node
{
public:
    Node *next;
    int data;
};

class Que
{
public:
    //this shows error
    /* 
    Node *front, *rear;
    front = NULL;
    rear = NULL;
    */

    //but this works
    Node *front = NULL, *rear = NULL;
};

这些:

front = NULL;
rear = NULL;

是作业 statements。还有这个:

Node *front = NULL, *rear = NULL;

是使用in-class initializers的声明(定义、初始化)语句。

赋值语句不允许出现在class声明体中,而初始化语句是。

您需要一个函数或 class 构造函数来 初始化 class 对象:

class Node
{
public:
    Node *next;
    int data;
};

class Que
{
public:
    Que() {
        Node *front, *rear;
        front = NULL;
        rear = NULL;
    }
};

在上述代码中,frontrear 现在有一个存储空间 class,因为它们在构造函数中,其作用类似于一个函数。


为了更好地说明,您可以使用以下代码:

class test {
public:
    int x;    // declaring a variable outside of a constructor or function
    x = 10;   // initialization is not allowed here
}
#define NULL nullptr
class Node
{
public:
    Node* next;
    int data;
};

class Que1 {
public: //Method 1 - initializer list
    Node* front{ NULL }, * rear{ NULL };
};
class Que2 {
public: //Method 2 - assignment operator for initialization
    Node* front = NULL, * rear = NULL;
};
class Que3 {
public: //Method 3 - initializer list at constructor
    Node* front, * rear;
    Que3() : front{ NULL }, rear{ NULL }
    {}
};
class Que4 {
public: //Method 4 - assignment after member intialization/construction
    Node* front, * rear;
    Que4()
    {
        front = NULL;
        rear = NULL;
    }
};

您的作业不在函数体中。由于您尝试初始化,我考虑过显示不同的语法。 方法 1 是首选方法。