2016-03-15 62 views
1

INT我的孩子類,當我使用繼承和設置默認: UserAccout("user","pass");是否有可能從cin取代輸入?父類默認構造函數由用戶輸入,然後通過繼承 - C++

這是我的代碼示例。

我有我的父類

class UserAcct 
{ 
private: 
    string userName; 
    string userPassword; 

public: 
    UserAcct(string newUserName, string newPassword);  
    ~UserAcct();           
}; 

這是UserAcct.cpp

UserAcct::UserAcct(string newUserName, string newPassword) 
{ 
    userName = newUserName; 
    userPassword = newUserName; 
} 

,這是我的子類可以這麼說

class GameSettings : public UserAcct 
private: 
    ofstream odataBase("gameSettings.txt", ios::app); 
    ifstream idataBase("gameSettings.txt", ios::app); 
    int  settingSet; 
public: 
    GameSettings(int newSettings); 

子類的.cpp

GameSettings::GameSettings (int newSettings) : UserAcct("user","pass")//this right here 
{ 
    settingsSet = newSettings; 
} 

ps。由於某種原因繼承不起作用,我不知道爲什麼。根據在:前的子類的.cpp「: UserAcct("user","pass");」我得到一個錯誤說

Error: expected a '{'

+0

凡'UserAccout'定義? – Vishal

+0

我添加了userAcct.cpp它在裏面定義 – Robolisk

+0

'〜User();'< - 這是錯誤的 – xvan

回答

1

問題1:

您可以通過函數調用得到cin輸入。

GameSettings::GameSettings (int newSettings) : UserAccout(getUserName(), getPassword()) {} 

哪裏getUserName()可以是GameSettings一個static成員函數或者非成員全局函數。

static std::string getUserName() 
{ 
    std::string name; 
    cin >> name; 
    return name; 
} 

getPassword()可以是一個類似的功能。

問題2:

你看到一個編譯器錯誤,因爲你最後一個;以下。

GameSettings::GameSettings (int newSettings) : UserAccout("user","pass"); 
                     ^^^ 

;需要通過{}和其他任何功能的體內去更換。

PS您正在使用UserAcctUserAccout。這需要修復。也許你應該把它拼出來以免混淆未來。使用UserAccount

+0

您解決了我的第一個問題,謝謝。我不確定這是否合法。在第二個問題中,我做了一個編輯。這是在我的實際代碼中是正確的,仍然給出了同樣的錯誤 – Robolisk

+0

@Robolisk,請參閱我的答案** PS **。 –

+0

我在我的計數內完成,將其全部更名爲UserAccount,三重檢查拼寫,仍然給我同樣的錯誤。 – Robolisk

0

你的實施需要一個身體:

GameSettings::GameSettings (int newSettings) : UserAccout("user","pass") { } 
+0

對不起,在我的實際代碼中它確實有一個正文,我只是沒有將它添加到問題中。它仍然不起作用。 – Robolisk

+0

然後檢查您的拼寫:UserAcct - > UserAccount - >用戶 有3個不同版本的^^ – kaiser