-1
class User
{
public:
    User(char *name,char *pass)
    {
        strncpy(username[num],name,strlen(name));
        username[num][strlen(name)]='\0';
        for(int i=0;i<strlen(pass);i++)
            password[num][i]=(i+pass[i])%256;
        password[num][strlen(pass)+1]='\0';
        num++;
    }
    static void AddUser(char *name,char *pass)
    {
        strncpy(username[num],name,strlen(name));
        username[num][strlen(name)]='\0';
        for(int i=0;i<strlen(pass);i++)
            password[num][i]=(i+pass[i])%256;
        password[num][strlen(pass)+1]='\0';
        num++;
    }
    static int loggin(char *name,char *pass)
    {
        for(int i=0;i<num;i++)
            if(strcmp(username[i],name)==0)
            {
                for(int j=0;pass[j]!='\0';j++)
                    if(password[i][j]!=(j+pass[j])%256)
                        return -1;
                return i;
            }
        return -1;
    }
private:
    static char username[10][20];
    static char password[10][20];
    static int num;
};

int User::num=0;

int main()
{
    char name[20],pass[20];
    User u1("LiWei","liwei99");
    u1.AddUser("ChenHanfu","20090911");
    User::AddUser("Zhanggaolin","198845");
    cout<<"Input username:";
    cin>>name;
    cout<<"Input password:";
    cin>>pass;
    if(User::loggin(name,pass)>=0)
        cout<<"success login!"<<endl;
    else
        cout<<"login fail!"<<endl;
    return 0;
}

上記は私のcppファイルのコードです。コンパイルすると、

Compiling source file(s)...
    4.cpp
    4.cpp: In constructor `User::User(char*, char*)':
    4.cpp:13: warning: comparison between signed and unsigned integer expressions
    4.cpp: In static member function `static void User::AddUser(char*, char*)':
    4.cpp:22: warning: comparison between signed and unsigned integer expressions
    Linking...
    A:\Homework\CPP\Stu\Debug\4.o: In function `ZN4UserC1EPcS0_':
    A:\Homework\CPP\Stu\4.cpp:(.text$_ZN4User6logginEPcS0_[User::loggin(char*, char*)]+0x2b): undefined reference to `User::username'
    A:\Homework\CPP\Stu\4.cpp:(.text$_ZN4User6logginEPcS0_[User::loggin(char*, char*)]+0x65): undefined reference to `User::password'
    A:\Homework\CPP\Stu\4.cpp:(.text$_ZN4User7AddUserEPcS0_[User::AddUser(char*, char*)]+0x2d): undefined reference to `User::username'
    A:\Homework\CPP\Stu\4.cpp:(.text$_ZN4User7AddUserEPcS0_[User::AddUser(char*, char*)]+0x59): undefined reference to `User::username'
    A:\Homework\CPP\Stu\4.cpp:(.text$_ZN4User7AddUserEPcS0_[User::AddUser(char*, char*)]+0x8b): undefined reference to `User::password'
    A:\Homework\CPP\Stu\4.cpp:(.text$_ZN4User7AddUserEPcS0_[User::AddUser(char*, char*)]+0xf2): undefined reference to `User::password'
    A:\Homework\CPP\Stu\4.cpp:(.text$_ZN4UserC1EPcS0_[User::User(char*, char*)]+0x2d): undefined reference to `User::username'
    A:\Homework\CPP\Stu\4.cpp:(.text$_ZN4UserC1EPcS0_[User::User(char*, char*)]+0x59): undefined reference to `User::username'
    A:\Homework\CPP\Stu\4.cpp:(.text$_ZN4UserC1EPcS0_[User::User(char*, char*)]+0x8b): undefined reference to `User::password'
    A:\Homework\CPP\Stu\4.cpp:(.text$_ZN4UserC1EPcS0_[User::User(char*, char*)]+0xf2): undefined reference to `User::password'
    collect2: ld returned 1 exit status

    Student.exe - 10 error(s), 2 warning(s)

エラーは、クラス内のインスタンス化されていない静的メンバー変数が原因で発生するため、問題を修正する方法を考えています。

解決策: C++静的メンバー変数とその初期化

4

1 に答える 1

1

に対して行ったのと同じ方法で、静的変数を明示的にインスタンス化する必要がありますnum

private:
    static char username[10][20];
    static char password[10][20];
    static int num;
};

int User::num=0;
char User::username[10][20];
char User::password[10][20];
于 2012-10-11T06:51:28.800 に答える