2012-10-16 40 views
0

好的,所以我有一個結構,我需要創建一個函數,增加一本書的數量。調用每本書的函數後,我會打電話printBooks,我可以做得很好。我知道這是一個非常簡單的程序,但我不能這樣做,所以任何幫助表示讚賞傳遞一個結構成員函數C++

#include <iostream> 
using namespace std; 

#define BOOKS 3 

struct Book 
{ 
    string title; 
    string isbn; 
    int amount; 
} books [BOOKS]; 

void printBooks(Book b); 
void addAmount(Book &book,int amount); 


int main() 
{ 
    int i; 

    for(int i = 0;i < BOOKS; i++) 
    { 
     cout << "Enter isbn : "; 
     cin >> books[i].isbn; 

     cout << "Enter title : "; 
     cin >> books[i].title; 

     cout << "Enter amount : "; 
     cin >> books[i].amount; 

    } 


    cout << "\nThe number of books after adding amount by one :\n"; 

    for(i = 0;i < BOOKS; i++) 
    { 
     addAmount(); // intentionally left blank.don't know what to put 
     printBooks(books[i]); 
    } 

    return 0; 
} 

void printBooks(Book b) 
{ 
    cout << b.isbn << endl; 
    cout << b.title << endl; 
    cout << b.amount << endl; 
} 
void addAmount(Book &book,int amount) 
{ 
    book.amount++; 
} 
+4

那麼有什麼不起作用? – jondinham

回答

6

你打電話addAmount();不帶參數。你大概的意思

addAmount(books[i], 42); 

而且考慮改變printBooks簽名

void printBook(const Book& b) 

,或者甚至更好,使它成爲一個成員函數。

+0

你是對的謝謝! –

+0

並將'book.amount ++;'更改爲'book.amount + = amount;'以便使用該參數,而不是僅添加一個參數。 –

1
void addAmount(Book &book) 
{ 
    book.amount++; 
} 

然後

addAmount(books[i]); 

順便說一句,你並不真的需要按值傳遞一個結構printBooks。只需使用一個const引用。調用代碼不需要修改。

void printBooks(const Book &b) 
{ 
    cout << b.isbn << endl; 
    cout << b.title << endl; 
    cout << b.amount << endl; 
}