2012-10-16 41 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; 
}