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