问题
Im having trouble with the reference parameters. The values in getStockInfo are supposed to be stored in reference parameters. I dont know how to do that so that displayStatus accepts those as arguments. Whenever i put something into getStockInfo in main it gives me the error More than one onstance of overloaded function "getStockInfo" matches the argument list.
#include <iostream>
#include <iomanip>
using namespace std;
void getStockInfo(int &, int&, double&);
void displayStatus(int &, double &);
int main()
{
int spoolsOrdered;
int spoolsStock;
double specialCharges;
cout << "Middletown Wholesale Copper Wire Company" << endl;
getStockInfo(spoolsOrdered, spoolsStock, specialCharges);
}
void getStockInfo(int &spoolsOrdered, int &spoolsStock, double specialCharges)
{
char ship;
cout << "How many spools would you like to order: ";
cin >> spoolsOrdered;
//Validate the spools ordered
while(spoolsOrdered < 1)
{
cout << "Spools ordered must be at least one" << endl;
cin >> spoolsOrdered;
}
cout << "How many spools are in stock: ";
cin >> spoolsStock;
//Validate spools in stock
while(spoolsStock < 0)
{
cout << "Spools in stock must be at least 0" << endl;
cin >> spoolsStock;
}
cout << "Are there any special shipping charges? ";
cout << "Enter Y for yes or another letter for no: ";
cin >> ship;
//Validate special charges
if(ship == 'Y' || ship == 'y')
{
cout << "Enter the special shipping charge: $";
cin >> specialCharges;
}
else
{
specialCharges = 10.00;
}
}
void displayStatus(int &backOrder, double &subtotal, double &shipping, double &total)
{
}
回答1:
Your declaration and definition of getStockInfo differ: The final parameter in one is a reference and in the other it is not.
void getStockInfo(int &, int&, double&);
...
void getStockInfo(int &spoolsOrdered, int &spoolsStock, double specialCharges)
A similar issue occurs with displayStatus: Here the number of parameters is different.
void displayStatus(int &, double &);
...
void displayStatus(int &backOrder, double &subtotal, double &shipping, double &total)
The error message occurs since the compiler can't determine whether you are telling it to call getStockInfo(int &, int&, double&) (which may come from another file) or the one defined in this file void getStockInfo(int &, int&, double).
Note having multiple versions is not "wrong". However calling one in a way that the compiler doesn't know which one to call is.
回答2:
Your parameter list in the prototype doesn't match the one in the definition.
void displayStatus(int &, double &);
vs
void displayStatus(int &backOrder, double &subtotal, double &shipping, double &total)
{
}
来源:https://stackoverflow.com/questions/15755391/c-reference-parameters-functions