2016-11-12 17 views
0

ポインタを使った関数を通してオブジェクト(ベクトルでもあります)を渡したかったのです。ポインタを使ってオブジェクトを関数に渡すにはどうすればよいですか?

この問題は、トランザクション "function"にオブジェクト "user"を渡そうとする行75(トランザクション(& user、userID);)で発生すると考えられます。 私はクラスが関連しているとは思わないので、私はそれらを残しました。事前にありがとうございます。ここでsource.cppコードは次のとおりです。

void transaction(vector<Customer *> &user, int userID); 

void newAccount(vector<Customer*> & user, int userID); 

void intr(vector<Customer*> & user, int userID, int account, int interest); 

void loans(vector<Customer*> & user, int userID, int account, int loan); 

int main() 
{ 

    vector<Customer> user(3); 

    user[0].setname("Josh"); 
    user[0].setID(1); 
    user[0].bank[0].setbalance(100); 
    user[0].bank[1].setbalance(101); 
    user[0].bank[0].setoverdraft(200); 
    user[0].bank[1].setoverdraft(201); 
    user[0].accounts = 1; 
    user[0].setpin(1202); 

    user[1].setname("John"); 
    user[1].setID(2); 
    user[1].bank[0].setbalance(102); 
    user[1].bank[0].setoverdraft(202); 
    user[1].accounts = 0; 
    user[1].setpin(1203); 

    user[2].setname("Jack"); 
    user[2].setID(3); 
    user[2].bank[0].setbalance(103); 
    user[2].bank[0].setoverdraft(203); 
    user[2].accounts = 0; 
    user[2].setpin(1204); 

    int input; 
    int userID; 
    int pin; 
    int account; 
    bool menu = true; 

    //Menu 
    while (menu) 
    { 
     cout << " - Enter '1' to display all customer names and ID's." << endl; 
     cout << " - Enter '2' for further transactions." << endl; 
     cout << " - Enter '3' to make a quick withdrawal of " << char(156) << "10 from an account." << endl; 
     cout << " - Enter '4' to exit." << endl; 
     cin >> input; 

     // List 
     if (input == 1) 
     { 
      for (int i = 0; i < user.size(); i++) 
      { 
       cout << "[Name: " << user[i].getname() << "\t" << "ID: " << user[i].getID() << "]" << endl; 
      } 
      cout << endl; 
     } 
     // Transactions 
     else if (input == 2) 
     { 
      cout << "Enter Customer ID: "; 
      cin >> userID; 
      cout << "Enter pin: "; 
      cin >> pin; 
      if (pin == user[userID].getpin()) 
      { 
       transaction(&user, userID); 
      } 
      else { cout << "Pin invalid." << endl; } 
     } 
     // Quick withdrawal 
     else if (input == 3) 
     { 
      cout << "Enter Customer ID: "; 
      cin >> userID; 
      cout << "Enter pin: "; 
      cin >> pin; 
      cout << "Enter the account you wish to make a withdrawal from: "; 
      cin >> account; 
      if (pin == user[userID].getpin()) 
      { 
       if (account <= user[userID].accounts) 
       { 
        if (user[userID].bank[account].getbalance() - 10 <= -user[userID].bank[account].getoverdraft()) 
        { 
         user[userID].bank[account].withdraw(10); 
        } 
        else { cout << "Insignificunt funds. Overdraft limit (" << char(156) << user[userID].bank[account].getoverdraft() << ")" << endl; } 

       } 
       else { cout << "That account does not exist." << endl; } 
      } 
      else { cout << "Pin invalid." << endl; } 
     } 
     // Exit 
     else if (input == 4) 
     { 
      menu = false; 
     } 
    } 

    return 0; 
    } 

    void transaction(vector<Customer *> &user, int userID){...} 

エラー説明:非constへの参照の初期値は左辺値でなければなりません。

答えて

1

あなたはtransaction()最初のパラメータに誤った引数を渡しているが、顧客のポインタのベクトル

std::vector<Customer*> &user 

の参照を取るが、あなたは、あなたは

vector<Customer> user(3); 
transaction(&user, userID); 

顧客のベクトルのアドレスを渡しています変更する必要があります
vector<Customer>

vector<Customer*> user(3)。あなたが同じことをやっている場合

または

変更
void transaction(vector<Customer *> &user, int userID);
void transaction(vector<Customer> &user, int userID);

同じ
には、他の機能のために行きます。

エラーについては、これが問題なのですか?

+0

'Customer'が顧客タイプのファミリーの基本クラスではないと仮定すると、' transaction'関数を変更する2つ目のオプションははるかに良いアイデアです。それでも、それは参照によって渡されるべきです。 – user4581301

+0

ありがとうございました!残念ながら、voidトランザクション(ベクトル&user、int userID)を変更するとこのエラーが発生します。トランザクションを無効にする(ベクトル&user、int userID);説明オーバーロードされた関数 "transaction"の複数のインスタンスが引数リストと一致します –

+0

@JoshuaTalbot複数の 'transaction'関数を宣言しましたか、すでにトランザクション関数を持つライブラリを含んでいますか?おそらく、 'transaction'の前方宣言を更新していませんか? – user4581301

関連する問題