首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

静态成员类的初始化有关问题

2013-07-09 
静态成员类的初始化问题//4-ATM.cpp//simulait ATM system#includeiostream#includecstringusing name

静态成员类的初始化问题

//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];//在类外声明一下。。

[解决办法]
类的静态成员就是应该在类内声明,类外定义。。建议你自己看看书。。

热点排行