Class 变量无法通过 class 方法访问

Class variable not reachable from class method

我正在尝试实现循环队列。

我已经在头文件中声明了队列的大小,并且我通过构造函数使用大小变量启动了我的队列。

这里有 queue.hqueue.cpp 个文件。

class Queue
{
   public:
   int size;
   int front, rear;
   int A[];

   Queue(int size);
   bool isEmpty();
   void enqueue(int n);
   int dequeue();
   int Peek();
   void Display();
   int sizeQ();
};

这里是queue.cpp

Queue::Queue(int size)
{
   int A[size];
   front = rear = -1;
}

bool Queue::isEmpty(){
if((front == -1)  && (rear == -1))
    return true;
else
    return false;
}


void Queue::Display(){
if(isEmpty()){
    cout << "Its empty! Nothing to display"<<endl;
}else{
    for(int i=0; i<sizeQ(); i++){
        cout << A[i] << endl;
    }
}
    cout <<endl;
}

这是我的主要

int main()
{

   Queue q1(10);
   q1.enqueue(20);
   q1.Display();
   return 0;
}

问题:尽管我在 main 中使用 size 创建了对象,但在 display 函数中循环看不到 size 变量。当我调试程序时,我看到大小为 0,因此 for 循环永远不会开始。

我试过的

 int Queue::sizeQ(){
   return size;
}

我尝试 return 通过方法调整尺寸;然而,没有运气。我应该怎么做才能访问大小变量?

Queue::Queue(int size)
{
   int A[size];
   front = rear = -1;
}

您永远不会在此处初始化 this->size。因此 sizeQ() returns size 成员的未初始化值。

在构造函数中添加this->size = size;

编辑:int A[size] 并不像您认为的那样。它正在创建一个本地数组,与成员 A 无关。请参阅@jignatius 的回答以了解如何修复它。

在构造函数内部启动大小如下:

Queue::Queue(int nSize) //changed name of parameter to nSize to remove confusion
{
   int A[size];
   front = rear = -1;
   size = nSize; // Initialize passed param to member variable of class
}   

目前您的构造函数创建了一个本地数组,该数组在完成后被销毁。你不想这样做。

如果要在 运行 时设置数组的大小,则必须在堆上声明它。为此,您应该在 header:

中像这样更改数组 A 的声明
int *A;

然后在你的构造函数中你可以在堆上分配数组:

Queue::Queue(int iSize): 
    size(iSize), front(-1), rear(-1)
{
   A = new int[size];
}

注意初始化列表正在初始化成员变量 size,front 和 rear。

您还必须取消分配数组。为此,请将析构函数添加到您的 class Queue 并执行此操作:

Queue::~Queue()
{
   delete [] A;
}

这将释放 A 使用的内存。