静态成员问题,为什么会出错?
#include <iostream>
using namespace std;
class CSell
{
public :
static float average()
{
return sum/n;
}
static void display()
{
cout < <sum < < ' ' < <average() < <endl;
}
CSell(int numn,int quantityn,float pricen):num(numn),quantity(quantityn)
{
float discount=1.0;
if (quantity> 10) discount=0.95;
price*=discount;
sum+=price*quantity;
n+=quantity;
}
private:
int num;
int quantity;
float price;
static float sum;
static int n;
};
void main()
{
CSell a(101,5,23.5),b(102,12,24.56),c(103,100,21.5);
CSell::display();
system( "pause ");
}
error LNK2019: 无法解析的外部符号 "private: static float CSell::sum " (?sum@CSell@@0MA),该符号在函数 "public: static void __cdecl CSell::display(void) " (?display@CSell@@SAXXZ) 中被引用
怎么回事啊?
[解决办法]
在main 上面加上
float CSell::sum;
int CSell::n;
静态变量要在全局环境给它们声明和初始化。
[解决办法]
没有定义啊. static数据成员的定义有点奇怪,要放到外面.
class CSell{...};
float CSell::sum = 0.0;
int CSell::n = 0;
[解决办法]
class CSell{...};
float CSell::sum = 0.0;
int CSell::n = 0;
[解决办法]
static float sum;
static int n;
这两个成员你没有定义,因为静态数据成员在类中的部分只是“声名”,而非定义。要想定义,应该在类体外面:
float CSell::sum = X.X;
int CSell::n = X;