2013-02-10 51 views
0

我一直在處理命令提示符下的用戶數據庫。它可以讓你添加一個用戶名和密碼,並登錄。當我編譯它時,我得到錯誤no match for 'operator==' in。我不完全確定是什麼導致了它。另外,我將它全部存儲在一個類中。創建用戶數據庫錯誤「不匹配'運營商=='在.....」 - C++

我的頭文件是:

#ifndef USER_PSW_H 
#define USER_PSW_H 
#include <string> 


class User_Psw 
{ 
    public: 
     User_Psw(); 
     void addToDatabase(); 
     void getNameIndex(); 
     bool PasswordMatches(); 
     void UserCheck(); 
    protected: 
    private: 
     int sizeOfDatabase; 
     int index; 
     std::string Usernames; 
     std::string Password; 
     std::string username; 
     std::string password; 
}; 

#endif // USER_PSW_H 

的構造是:

User_Psw::User_Psw() 
{ 
    const int SIZE = 100; 
    index = 0; 
    sizeOfDatabase = 0; 
    Usernames[SIZE]; 
    Password[SIZE]; 
} 

與實際誤差的功能是:

void User_Psw::getNameIndex() 
{ 
    for(int i=0; i < sizeOfDatabase; i++) 
    { 
     if (username == Usernames[i]) 
     { 
      index = i; 
     } 
    } 
} 

使用包含錯誤的實際代碼行爲if (username == Usernames[i])

如果需要,我還可以添加更多代碼片段。

+0

是否構造實際編譯? – 2013-02-10 01:39:44

+0

嗯,我認爲它確實是因爲我調用構造函數後的錯誤函數。 – ponger3d 2013-02-10 01:41:22

+2

用戶名[SIZE]沒有做你認爲的事情;它索引到一個字符串並忽略返回的字符,而不是聲明一個大小爲SIZE的數組。因此,用戶名和用戶名是相同的類型,但是用戶名[i]返回一個字符,因此不能與運營商==用戶名進行比較。改爲使用矢量。 – 2013-02-10 01:43:21

回答

2

這不起作用,因爲當您實際將類型定義爲std::string時,您正在訪問Usernames

你想是這樣的:

std::vector<std::string> Usernames; 

然後你就可以訪問它想:

if (Usernames[i] == username) { // etc 
+0

謝謝!這很有意義。 – ponger3d 2013-02-10 03:23:02