2016-07-21 42 views
0

我想調用一個方法將對象添加到另一個對象內的向量。我收到錯誤;調用一個方法,並傳入一個指向類的指針

'': Illegal use of this type as an expression 

在我的程序中,我聲明瞭一個對象來存儲我的節點在main;

accountStream *accountStore = new accountStream; 

然後調用函數;

new_account(&accountStore); 

new_account函數是as;

void new_account(accountStream &accountStorage) 
{ 
    newAccount *account = new newAccount; 
    (&accountStorage)->pushToStore(account); 
} 

賬戶流類有一個接收它的向量,但是我的錯誤在哪裏;

class accountStream 
{ 
public: 
    accountStream(); 
    ~accountStream(); 

    template <class account> 
    void pushToStore(account); 

private: 
    std::vector <newAccount*> accountStore; 
}; 

template<class account> 
inline void accountStream::pushToStore(account) 
{ 
    accountStore.push_back(account); 
} 

錯誤在第二行;

accountStore.push_back(account); 

我有一種感覺,這件事情跟我傳遞的對象進入方法的方式,但亂搞了一段時間後,我一直無法查明確切位置我已經出錯了。

回答

0

幾個問題:

  1. 必須在此處(不僅類型)指定變量名:

    template<class account> 
    inline void accountStream::pushToStore(account c) 
    { 
        accountStore.push_back(c); 
    } 
    
  2. 你必須接受一個指針(而不是參考一個指針)

    void new_account(accountStream *accountStorage) 
    { 
        newAccount *account = new newAccount; 
        accountStorage->pushToStore(account); 
    } 
    
  3. 必須調用函數的指針作爲一個參數:

    new_account(accountStore); 
    

    或者,你可以聲明變量(不是指針):

    accountStream accountStore; 
    

    調用該函數:

    new_account(accountStore); 
    

    並且收到參考:

    void new_account(accountStream &accountStorage) 
    { 
        newAccount *account = new newAccount; 
        accountStorage.pushToStore(account); 
    } 
    
+0

感謝您的解釋! – Dannys19

1

2個問題:

  1. new_account(&accountStore);是錯誤的,用new_account(*accountStore);相匹配的參數類型。

  2. accountStore.push_back(account);是錯誤的。 account是類型不是對象。給函數添加一些參數。

0

正如已經在這裏找到答案,你需要使用* accountStore而不是& accountStore因爲函數需要一個參考,而不是一個指針的指針(這是您使用&操作上的指針得到什麼)。

第二個問題是在這裏:

template<class account> 
inline void accountStream::pushToStore(account) 
{ 
    accountStore.push_back(account); 
} 

您聲明模板上的「帳戶」,因此賬戶的功能是一個類型,而你正在嘗試下一行做的是的push_back一個類型,不是一個對象。 正確的代碼是:

template<class account> 
inline void accountStream::pushToStore(account acct) 
{ 
    accountStore.push_back(acct); 
} 

,因爲帳戶是而ACCT是該類型賬戶的實例。

+1

是的,人們解釋說它讓我覺得有點愚蠢!猜猜我有一些閱讀要做。 – Dannys19

相關問題