2017-11-04 67 views
-4

我只编写了几个月的代码,并且遇到了我的任务之一的障碍。该描述是传递引用程序C++

“重写与函数给出的钱包porgram执行插入和 删除操作。函数初始化(INT & P,诠释& N,诠释& d, INT & Q)将初始化便士,镍,角钱和宿舍为零。 功能插入(INT & p,诠释& N,诠释& d,诠释& q)将增加便士, 五分,一角硬币和宿舍。函数美元()将返回 美元。函数remove(int & p,int & n,int & d,int & q)将 减去便士,镍币,硬币和四分之一。该功能显示() 返回一个新字符串打印钱包的剩余 便士,镍,角钱和宿舍的内容。”

这是我已经能够拿出这么远。

#include <iostream> 

using namespace std; 

int main() 
{ 
    int pennies, nickels, dimes, quarters, p, n, d, q; 
    float total; 

    void initialize(int&, int&, int&, int&); 
    void insert(int&, int&, int&, int&); 
    void remove(int&, int&, int&, int&); 
    float dollars(int, int, int, int); 
    void print(int, int, int, int, float); 


    initialize(pennies, nickels, dimes, quarters); 
    total = dollars(pennies, nickels, dimes, quarters); 
    print(pennies, nickels, dimes, quarters, total); 

    insert(pennies, nickels, dimes, quarters); 
    total = dollars(pennies, nickels, dimes, quarters); 
    print(pennies, nickels, dimes, quarters, total); 

    remove(pennies, nickels, dimes, quarters); 
    total = dollars(pennies, nickels, dimes, quarters); 
    print(pennies, nickels, dimes, quarters, total); 

} 
void initialize(int& pennies, int& nickels, int& dimes, int& quarters) 

{ 
    pennies=0; 
    nickels=0; 
    dimes=0; 
    quarters=0; 
} 

void insert(int& pennies, int& nickels, int& dimes, int& quarters) 
{ 
    int p, n, d, q; 
    cout << "Insert pennies, nickels, dimes, and quarters:"; 
    cin >> p, n, d, q; 

    pennies +=p; 
    nickels +=n; 
    dimes +=d; 
    quarters +=q; 

} 

void remove(int& pennies, int& nickels, int& dimes, int& quarters) 
{ 
    int p, n, d, q; 
    cout << "Remove pennies, nickels, dimes, and quarters:"; 
    cin >> p, n, d, q; 

    pennies -=p; 
    nickels -=n; 
    dimes -=d; 
    quarters -=q; 

} 

float dollars(int pennies, int nickels, int dimes, int quarters, float total) 
{ 
    total= pennies + 5*nickels + 10*dimes + 25*quarters; 
    total=(float)total/100; 

    return total; 
} 
void print(int pennies, int nickels, int dimes, int quarters, float total) 
{ 
    cout << quarters << "quarters+ " << dimes << " dimes+" << nickels << " nickels+" << pennies << " pennies= $" << total <<"\n"; 

} 

我一直在使用onlinegdb.com被编译我的所有程序因为这是我所有的类需要我使用。当我编译这个程序,我得到

/tmp/ccd19JQt.o: In function `main': 
main.cpp:(.text.startup+0x2b): undefined reference to `dollars(int, int, int, int)' 
main.cpp:(.text.startup+0x6a): undefined reference to `dollars(int, int, int, int)' 
main.cpp:(.text.startup+0xa9): undefined reference to `dollars(int, int, int, int)' 
collect2: error: ld returned 1 exit status 

d任何人都知道我可以做些什么来让程序编译和运行?非常感谢。

这就是我为什么改变它以使其工作。感谢您的建议。

int main() 
{ 
    int pennies, nickels, dimes, quarters, p, n, d, q; 
    float total; 

    void initialize(int&, int&, int&, int&); 
    void insert(int&, int&, int&, int&); 
    void remove(int&, int&, int&, int&); 
    float dollars(int, int, int, int); 
    void print(int, int, int, int, float); 


    initialize(pennies, nickels, dimes, quarters); 
    total = dollars(pennies, nickels, dimes, quarters); 
    print(pennies, nickels, dimes, quarters, total); 

    insert(pennies, nickels, dimes, quarters); 
    total = dollars(pennies, nickels, dimes, quarters); 
    print(pennies, nickels, dimes, quarters, total); 

    remove(pennies, nickels, dimes, quarters); 
    total = dollars(pennies, nickels, dimes, quarters); 
    print(pennies, nickels, dimes, quarters, total); 

} 
void initialize(int& pennies, int& nickels, int& dimes, int& quarters) 

{ 
    pennies=0; 
    nickels=0; 
    dimes=0; 
    quarters=0; 
} 

void insert(int& pennies, int& nickels, int& dimes, int& quarters) 
{ 
    int p, n, d, q; 
    cout << "Insert pennies, nickels, dimes, and quarters:"; 
    cin >> p>>n>>d>>q; 

    pennies +=p; 
    nickels +=n; 
    dimes +=d; 
    quarters +=q; 

} 

void remove(int& pennies, int& nickels, int& dimes, int& quarters) 
{ 
    int p, n, d, q; 
    cout << "Remove pennies, nickels, dimes, and quarters:"; 
    cin >> p>>n>>d>>q; 

    pennies -=p; 
    nickels -=n; 
    dimes -=d; 
    quarters -=q; 

} 

float dollars(int pennies, int nickels, int dimes, int quarters) 
{ 
    float total; 
    total= pennies + 5*nickels + 10*dimes + 25*quarters; 
    total=(float)total/100; 

    return total; 
} 
void print(int pennies, int nickels, int dimes, int quarters, float total) 
{ 
    cout << quarters << "quarters+ " << dimes << " dimes+" << nickels << " nickels+" << pennies << " pennies= $" << total <<"\n"; 

} 
+1

你的方法声明在main中。将它们移出。 –

+1

为什么你将'float total'添加到'dollars'的参数列表中?它应该是你如何使用它的一个局部变量。不是参数。 – StoryTeller

+1

@ DanielA.White - 这是合法的,虽然古怪。 – StoryTeller

回答

0

以下是声明:

float dollars(int, int, int, int); 
//   1 2 3 4 

您已经声明了4个参数。

下面是函数调用:

total = dollars(pennies, nickels, dimes, quarters); 
//    1  2  3  4 

您传递4个参数。到现在为止还挺好。

这里的定义是:

float dollars(int pennies, int nickels, int dimes, int quarters, float total) 
//   1   2   3   4    5 
{ ... 

你给了一个定义5参数功能dollars(int,int,int,int,float)。链接器错误是因为您调用的dollars(int,int,int,int)缺少定义,但没有定义。

解决方案:定义功能dollars(int,int,int,int)

+0

感谢您的帮助。我设法让你的帮助程序工作。 – Matthew