在阅读StackOverflow的讨论并实现一些建议后,我将这些代码用于测试类的静态成员的行为。 这是标题,它有类声明:
class OurClass
{
private:
static int x, y;
public:
static void setVals(int valx, int valy);
static int getValx();
static int getValy();
static void initialize();
};
这是cpp文件,它具有这些成员的定义以及main()函数:
#include <iostream>
#include "OurClass.hpp"
using namespace std;
void OurClass::initialize()
{
static int x = 0;
static int y = 0;
}
void OurClass::setVals(int valx, int valy)
{
static int x = valx;
static int y = valy;
}
int OurClass::getValx()
{
static int x;
return x;
}
int OurClass::getValy()
{
static int y;
return y;
}
int main(void)
{
OurClass::inicializa();
cout << "Provide x and y..." << endl;
OurClass::setVals(cin.get(), cin.get());
cout << "Value of x: " << OurClass::getValx() << endl;
cout << "Value of y: " << OurClass::getValy() << endl;
return 0;
}
因此,假设该类存在静态变量,并且静态函数只访问静态变量,我期望x和y将具有我们从键盘读取的值,并在main中调用setVals()( )。但是当在couts中打印它们的值时,它们仍然具有我们在initialize()函数中指定的值(BTW是我在这里得到的另一个建议,即在方法中初始化静态变量)。 即使我将它们公开,我也无法通过OurClass :: x或y直接引用变量。 你们知道为什么吗?
答案 0 :(得分:1)
此代码不是设置现有变量的值,而是创建新的本地静态变量。修正:
void OurClass::initialize()
{
x = 0;
y = 0;
}
void OurClass::setVals(int valx, int valy)
{
x = valx;
y = valy;
}
int OurClass::getValx()
{
return x;
}
int OurClass::getValy()
{
return y;
}
在.cc
文件(不是标题)中添加这些静态变量的定义:
int OurClass::x;
int OurClass::y;
答案 1 :(得分:1)
首先,您需要访问本地类的静态变量,而不是在每个方法中声明新方法局部变量。检查下面。
class Out {
private:
static int x, y;
public:
void set(int x, int y);
int getSum();
};
int Out::x = 0;
int Out::y = 0;
void Out::set(int x, int y) {
Out::x = x;
Out::y = y;
}
int Out::getSum() {
return Out::x + Out::y;
}