帮我看看哪里有错误并帮忙改一下 谢谢

来源:百度知道 编辑:UC知道 时间:2024/05/26 03:43:57
#include "stdafx.h"
#include <iostream.h>
class Y
{
public:
Y(int i){_callsXval = i;}
static int callsXval(){return _callsXval;}
private:
static int _callsXval;
};
static int Y::_callsXval = 0;
void main()
{
Y A(0);
cout<<"_callsXval="<<Y::callsXval()<<endl;
Y B(20);
cout<<"_callsXval"<<B._callsXval<<endl;
}

#include <iostream>

using namespace std;

class Y {
public:
Y() {}
static int callsXval() {return _callsXval;}
static void callsXval(int value) {_callsXval = value;}
private:
static int _callsXval;
};

int Y::_callsXval = 0;

int
main(void) {
Y::callsXval(3);
cout << Y::callsXval() << endl;
Y::callsXval(5);
cout << Y::callsXval() << endl;
}
######################################################
首先声明我没有Windows,这段程序在gcc 3.4.6 下编译通过,使用编译选项-ansi -pedantic -W -Wall,如果你用VC的话,可能需要把#include <iostream>改成#include <iostream.h>,并且可能需要去掉using namespace std;

你的问题在于_callsXval是静态变量,被所有类实例共享,因此只能被静态函数调用,而类的构造函数无论如何不可能是静态成员函数。因此通过构造函数设置静态变量的值是不可能的,由于_callsXval是private,因此需要重载一下callsXval()函数来设置此变量即可。

另外多说一句,作为一个好的并且相对正确的编程风格,main()应该声明成返回int 而不是void

不能用B._callsXval
首先这是private