关于 c++ 静态变量 声明 的疑惑,高手指点下~

来源:百度知道 编辑:UC知道 时间:2024/05/22 04:02:01
代码如下:
#include <iostream>

using namespace std;

class salse
{
public:
static float sum;
static float discount;
static int n;
};

int
main()
{
salse::sum=0;
salse::n=0;
salse::discount=0.98;
return 0 ;
}

链接提示出错

error LNK2001: unresolved external symbol "public: static int day::n" (?n@day@@2HA)

error LNK2001: unresolved external symbol "public: static float day::sum" (?sum@day@@2MA)

error LNK2001: unresolved external symbol "public: static float day::discount" (?discount@day@@2MA)

后来发现修改成:

#include <iostream>

using namespace std;

class salse
{
public:
static float sum;
static float discount;
static int n;
};

salse::sum; //网上说要加入外部的声明
salse::n;
salse::discount;

int
main()
{

我想问下:为什么在类中定义了的静态变量 还要 在类外部声明 才能使用??是,静态成员必须在外部声明。
静态变量不是一直在内存中存在的吗?是,从声明开始到程序结束。
不是会自动初始化为0的吗??? 是的。

class salse
{
public:
static float sum;
static float discount;
static int n;
};
float salse::sum ;
float salse::discount;
int salse::n;
/*
salse::sum; //网上说要加入外部的声明
salse::n;
salse::discount;
*/
//你忘了类型说明。
int
main()
{/*
salse::sum=0;
salse::n=0;
salse::discount=0.98;*/
printf("%f %f %d\n",salse::sum,salse::discount,salse::n);
return 0 ;
}

在类当中使用外部声明static才可以让这个类函数在外部没有实例化就可以使用.
这和c语言的static是有些区别的.
如果你不加static,
那么你可以在main()
{
sales instance;//先实例化个对象
instance.sum=0;
instance.n=0;
instance.discount=0.98;
return 0;
}

请问谁告诉你变量会自动初始化为NULL(0)的?

变量如果你没有初始化,那么它的值是不确定的

如:

int i;

你用

cout << i << '\n'