C++ 访问C+中的静态变量+;

C++ 访问C+中的静态变量+;,c++,variables,static,C++,Variables,Static,我正在使用Qt Creator尝试创建一个基本的计算器应用程序。我试图测试前几个方法,为了使其余的编码更容易,我不得不编写一个,但是,这个方法不是编译的。我正在尝试访问一个静态变量,该变量保存计算器屏幕的当前值,但它一直给我: C:\Users\****\Documents\Qt Projects\SimpleCalculator\calculator.cpp:15: error: C2248: 'Calculator::currVal' : cannot access private memb

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

C:\Users\****\Documents\Qt Projects\SimpleCalculator\calculator.cpp:15: error: C2248: 'Calculator::currVal' : cannot access private member declared in class 'Calculator'
这是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()
{

}

您需要指定
getNewVal
属于
Calculator

QString Calculator::getNewVal(quint64 nextDig)
//      ^^^^^^^^^^             ^
//   This was missing          |
//                             |
//   Add 'u' above to match the declaration
< >否则,C++认为这是一个独立的函数(尽管事实上您已经在代码< Calpor < /COD> >中声明了一个同名成员函数)。 您还需要移动这两个定义

long long int Calculator::ans = 0;
long long int Calculator::currVal = 0;
从头文件到实现文件

Calculator::currVal;//this is where I am trying to access the variable
无法工作,因为该值在标头中声明为private(如警告所示):

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;
这是私人的

尝试:

或者为此创建一个getter方法

您还可以将
getNewVal
作为类的好友函数:

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

当我这样做时,我得到了这个错误:“C:\Users****\Documents\Qt Projects\SimpleCalculator\calculator.cpp:15:错误:C2511:'QString calculator::getNewVal(qint64)':在“calculator”中找不到重载的成员函数”@user2337530这是因为您在实现中缺少
u
:您键入的是
qint64
,而不是
quint64
。您必须热爱编程我完全错过了。现在,它将编译。谢谢,我试过了,但这样做会让我犯几个错误。我知道它是私有的,但是当我把它放在public下时,我得到了大约6个错误;啊酷,不知道你可以把一个全局函数变成朋友:)好吧,当我把方法改为:“QString Calculator::getNewVal(***)”时,我得到了这个错误:“C:\Users***\Documents\Qt Projects\SimpleCalculator\Calculator.cpp:18:错误:C2511:“QString Calculator::getNewVal(qint64)”:在“Calculator”中找不到重载的成员函数
public:
   static long long int currVal;
public:
    friend QString ::getNewVal(qint64 nextDig);