访问C++中的静态变量

accessing a static variable in C++

本文关键字:静态 变量 C++ 访问      更新时间:2023-10-16

我正在使用Qt Creator尝试创建一个基本的计算器应用程序。我试着测试前几个方法,为了让剩下的代码更容易,我不得不写一个,但这个方法没有编译。我试图访问一个静态变量,它保存计算器屏幕的当前值,但它一直给我:

C:Users****DocumentsQt ProjectsSimpleCalculatorcalculator.cpp:15: error: C2248: 'Calculator::currVal' : cannot access private member declared in class 'Calculator'

这是计算器.cpp

    #include "calculator.h"
#include <QLCDNumber>
Calculator::Calculator(QWidget *parent) :
    QWidget(parent), ui(new Ui::Calculator)
{
    ans = 0;
    currVal = 0;
    setupUi(this);
}
//problem method
QString getNewVal(qint64 nextDig)
{
    //--------------------------------------------
    long long int val = Calculator::currVal;//this is where I am trying to access the variable
    //--------------------------------------------
    if(nextDig==0)
    {
        if(val > 0)
        {
            QString str = QString::number(val);
            str.append("0");
            return str;
        }
        else
        {
            return "0";
        }
    }
    else if(nextDig==1)
    {
        QString str = QString::number(val);
        str.append("1");
        return str;
    }
    return NULL;
}
void Calculator::on_Zero_clicked()
{
    ui->Display->display(getNewVal(0));
    currVal = ui->Display->intValue();
}
void Calculator::on_One_clicked()
{
}

这是头文件:

#ifndef CALCULATOR_H
#define CALCULATOR_H
#include "ui_calculator.h"
class Calculator : public QWidget, private Ui::Calculator
{
    Q_OBJECT

public:
     Calculator(QWidget *parent = 0);
private slots:
    void on_Zero_clicked();
    void on_One_clicked();
private:
    Ui::Calculator *ui;
    QString getNewVal(quint64);
    static long long int ans;
    static long long int currVal;

};
long long int Calculator::ans = 0;
long long int Calculator::currVal = 0;
#endif

 // CALCULATOR_H
Calculator::currVal;//this is where I am trying to access the variable

不起作用,因为值在您的头中被声明为私有(如警告所示(:

private:
    Ui::Calculator *ui;
    QString getNewVal(quint64);
    static long long int ans;
    **static long long int currVal;**

以及您的功能:

QString getNewVal(qint64 nextDig)

不是该类的一部分。

static long long int currVal;

是私人的!

尝试:

public:
   static long long int currVal;

或者为此创建一个getter方法。

也可以将getNewVal作为类的朋友函数:

public:
    friend QString ::getNewVal(qint64 nextDig);

您需要指定getNewVal属于Calculator

QString Calculator::getNewVal(quint64 nextDig)
//      ^^^^^^^^^^             ^
//   This was missing          |
//                             |
//   Add 'u' above to match the declaration

否则,C++认为这是一个独立的函数(尽管您已经在Calculator中声明了一个同名的成员函数(。

您还需要移动两个定义

long long int Calculator::ans = 0;
long long int Calculator::currVal = 0;

从头文件到实现文件。