静态成员类的初始化问题
//4-ATM.cpp
//simulait ATM system
#include<iostream>
#include<cstring>
using namespace std;
const unsigned long long USERAMOUNT=2;
const unsigned USERNAMELENGTH=64+1,PASSWORDLENGTH=6+1;
class user
{
private:
char username[USERNAMELENGTH];
char password[PASSWORDLENGTH];
long double deposit;
public:
user():deposit(0){}
user(char * tmpUsername,char * tmpPassword,long double tmpDeposit):deposit(tmpDeposit)
{
strcpy(username,tmpUsername);
strcpy(password,tmpPassword);
}
///////////
};
class ATM
{
private:
bool isLogin;
static user users[USERAMOUNT];//class member needed to be initialized.
user * currentUser;
user * targetUser;
public:
//static int initusers();
ATM():isLogin(false),currentUser(NULL),targetUser(NULL){}
};
int main()
{
ATM atm0;
while(!atm0.login())
{
atm0.login();
while(atm0.login())
{
cout<<"1, Withdraw\n"<<
"2, Deposit\n"<<
"3, Show Deposit\n"<<
"4, Transfer\n"<<
"5, Change Password\n"<<
"0, Log off\n"<<endl;
int choice;
cin>>choice;
switch(choice)
{
case 1: atm0.withdraw();break;
case 2: atm0.deposit();break;
case 3: atm0.showDeposit();break;
case 4: atm0.transfer();break;
case 5: atm0.changePassword();break;
case 0: atm0.logoff();break;
}
}
}
return 0;
}
代码如上,我在ATM类声明了一个user类,且为 静态成员.
1:刚开始并没有声明static int initusers()函数,编译的时候提示undifined reference to "ATM::users",原因是静态成员类数组users[USERAMOUNT],于是我在ATM类内声明了static int initusers(),并且在main函数之前做了一下定义
int ATM::initusers()
{
for(int i=0; i<USERAMOUNT; i++)
{
ATM::users[i].user();
}
}
用于显式调用user类的构造函数,可是这个时候提示invalid use of "user::user"?
对于这个问题不明白怎么回事?
希望能得到您的解释?而且如何解决这个静态成员类的初始化问题.
谢谢! 类 静态成员类 初始化
[解决办法]
class ATM
{
private:
bool isLogin;
static user users[USERAMOUNT];//class member needed to be initialized.
user * currentUser;
user * targetUser;
public:
//static int initusers();
ATM():isLogin(false),currentUser(NULL),targetUser(NULL){}
};
user ATM::users[USERAMOUNT];//在类外声明一下。。
[解决办法]
类的静态成员就是应该在类内声明,类外定义。。建议你自己看看书。。