我无法使用静态变量和c ++类获得正确的语法。
这是一个显示我问题的简化示例。
我有一个函数可以更新所有对象应该相同的变量, 然后我有另一个想要使用该变量的函数。 在这个例子中,我只是返回它。
#include <QDebug>
class Nisse
{
private:
//I would like to put it here:
//static int cnt;
public:
void print()
{
//And not here...!
static int cnt = 0;
cnt ++;
qDebug() << "cnt:" << cnt;
};
int howMany()
{
//So I can return it here.
//return cnt;
}
};
int main(int argc, char *argv[])
{
qDebug() << "Hello";
Nisse n1;
n1.print();
Nisse n2;
n2.print();
}
print函数中的当前本地静态是此函数的本地静态, 但我希望它是“班上的私人和全球”。
感觉我在这里缺少一些基本的:s c ++语法。
/感谢
解决方案:
我错过了
int Nisse::cnt = 0;
所以工作示例看起来像
#include <QDebug>
class Nisse
{
private:
static int cnt;
public:
void print()
{
cnt ++;
qDebug() << "cnt:" << cnt;
};
int howMany()
{
return cnt;
}
};
int Nisse::cnt = 0;
int main(int argc, char *argv[])
{
qDebug() << "Hello";
Nisse n1;
n1.print();
Nisse n2;
n2.print();
qDebug() << n1.howMany();
}
答案 0 :(得分:6)
您注释掉的代码就在那里。您还需要使用int Nisse::cnt = 0;
语句在类外定义它。
class Nisse
{
private:
static int cnt;
public:
...
};
int Nisse::cnt = 0;
答案 1 :(得分:3)
答案 2 :(得分:2)
您无法在类定义中初始化静态成员变量。
从您的评论中,您似乎对C ++语法有点困惑,特别是因为您的方法也像在Java中一样定义。
#include <QDebug>
class Nisse
{
private:
static int cnt;
public:
void print();
int howMany();
};
Nisse::cnt = 0;
void Nisse::print()
{
cnt++;
qDebug() << "cnt:" << cnt;
}
int Nisse::howMany()
{
//So I can return it here.
return cnt;
}
答案 3 :(得分:0)
在头文件中:
class Nisse
{
private:
static int cnt;
public:
...
};
在cpp文件中:
int Nisse::cnt = 0;