【问题标题】:Error too many arguments to function错误太多参数无法运行
【发布时间】:2017-12-05 12:20:48
【问题描述】:

我继续收到此错误,我已多次查看我的代码,但看不到我在哪里走错了路。该程序应该让 5 个用户输入一个评分,然后它会找到最高和最低的输入,并将它们与平均值一起返回给用户。

提前致谢。

#include <iostream> // whatever this is
#include <iomanip>
using namespace std;

int getValue();
int findLowest();
int findHighest();
double findAverage();

int main(){  // main function

    cout << setw(15)<<""<< "Product Review"; // displays this at the top

    int ratingOne = getValue();
    int ratingTwo = getValue();
    int ratingThree = getValue();
    int ratingFour = getValue();
    int ratingFive = getValue();
    int low = findLowest(ratingOne, ratingTwo, ratingThree, ratingFour, ratingFive);
    int high = findHighest(ratingOne, ratingTwo, ratingThree, ratingFour, ratingFive);
    double average = findAverage(ratingOne, ratingTwo, ratingThree, ratingFour, ratingFive);

    cout << "\nThe highest rating received was: " << high;
    cout << "\nThe lowest rating received was: " << low;
    cout << std::fixed << std::setprecision(2) << "\nThe average rating received among 5 users was: " << average;
}

int getValue(){
    int rating; 

    do {
        cout << "\nOn a scale of 1 to 10, how would you rate our product? ";
        cin >> rating; 

        if (rating < 1 || rating > 10) {cout << "\nYou have entered an invalid number. Please try again.";}
    } while (rating < 1 || rating > 10);
    return rating;
}

int findLowest(){
    int low = 11;
    if (ratingOne < low) { low = ratingOne }
    if (ratingTwo < low) { low = ratingTwo }
    if (ratingThree < low) { low = ratingThree }
    if (ratingFour < low) { low = ratingFour }
    if (ratingFive < low) { low = ratingFive }
    return low;
}
int findHighest(){
    int high = 0;
    if (ratingOne > high) { high = ratingOne }
    if (ratingTwo > high) { high = ratingTwo }
    if (ratingThree > high) { high = ratingThree }
    if (ratingFour > high) { high = ratingFour }
    if (ratingFive > high) { high = ratingFive }
    return high;
}
double findAverage(){
    double average;
    average = ratingOne + ratingTwo + ratingThree + ratingFour + ratingFive;
    average = average / 5;
    return average;
}

【问题讨论】:

  • findlowest() 不带任何参数,你用 5 个参数调用它。 findHighestfindAverage 也是如此。
  • edit您的问题提供minimal reproducible example
  • ratingOneratingTworatingThreeratingFourratingOne设为全局并调用findLowestfindHighestfindAverage这三个函数,不带任何参数main。或者更改函数签名以接受五个int
  • @Barmar 我不是 100% 熟悉这些术语。我认为调用该函数只会利用存储在 () 中的变量。我们不允许使用全局变量。
  • @jm21609 不,这不是函数调用的工作方式。您需要重新阅读教科书或教程中关于调用函数的部分。

标签: c++ function arguments


【解决方案1】:

函数原型中参数的数量和类型

int findLowest();
int findHighest();
double findAverage();

应该与您的定义相匹配。他们没有。看来您想将 int 类型的参数 (5) 传递给上面的函数,因此在原型中。您必须指定。

int findLowest(int, int, int, int, int);
int findHighest(int, int, int, int, int);
double findAverage(int, int, int, int, int);

另外,在你的函数定义中。

int findLowest(int ratingOne, int ratingTwo, int ratingThree,  int ratingFour, int ratingFive){...}
int findHighest(int ratingOne, int ratingTwo, int ratingThree,  int ratingFour, int ratingFive){...}
double findAverage(int ratingOne, int ratingTwo, int ratingThree,  int ratingFour, int ratingFive){..}

调用函数时的参数和类型的数量也应该与你的函数定义相匹配。

【讨论】:

  • 我将原型更改为 int findLowest(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive);
  • 程序刚刚给我一个错误,指出“未定义对'findlowest(int, int, int, int, int)'的引用
  • @jm21 没问题。在原型中声明参数的标识符是为了便于阅读,这是鼓励的。但在小程序中,参数的类型就足够了。
  • @jm21 检查函数 findlowest 在定义中的名称与原型中的名称不匹配。
  • 我完全迷路了。我已经检查了所有三个。它们都是一样的,没有大小写错误,它们都被声明为 int,我真的不确定它还能是什么
【解决方案2】:

函数 findLowest 和 findHighest 没有任何参数,但您提供了 5。要正确执行此操作,您应该编写:

#include <iostream> // whatever this is
#include <iomanip>
using namespace std;

int getValue();
int findLowest(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive);
int findHighest(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive);
double findAverage(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive);


int main(){  // main function

cout << setw(15)<<""<< "Product Review"; // displays this at the top    

int ratingOne = getValue();
int ratingTwo = getValue();
int ratingThree = getValue();
int ratingFour = getValue();
int ratingFive = getValue();
int low = findLowest(ratingOne, ratingTwo, ratingThree, ratingFour, ratingFive);
int high = findHighest(ratingOne, ratingTwo, ratingThree, ratingFour, ratingFive);
double average = findAverage(ratingOne, ratingTwo, ratingThree, ratingFour, ratingFive);

cout << "\nThe highest rating received was: " << high;
cout << "\nThe lowest rating received was: " << low;
cout << std::fixed << std::setprecision(2) << "\nThe average rating received among 5 users was: " << average;
}

int getValue(){
int rating; 

do {
cout << "\nOn a scale of 1 to 10, how would you rate our product? ";
cin >> rating; 

if (rating < 1 || rating > 10) {cout << "\nYou have entered an invalid number. Please try again.";}
} 

while (rating < 1 || rating > 10);
return rating;
}

int findLowest(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive){
int low = 11;
if (ratingOne < low) { low = ratingOne; }
if (ratingTwo < low) { low = ratingTwo; }
if (ratingThree < low) { low = ratingThree; }
if (ratingFour < low) { low = ratingFour; }
if (ratingFive < low) { low = ratingFive; }
return low;
}
int findHighest(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive){
int high = 0;
if (ratingOne > high) { high = ratingOne; }
if (ratingTwo > high) { high = ratingTwo; }
if (ratingThree > high) { high = ratingThree; }
if (ratingFour > high) { high = ratingFour; }
if (ratingFive > high) { high = ratingFive; }
return high;
}
double findAverage(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive){
double average;
average = ratingOne + ratingTwo + ratingThree + ratingFour + ratingFive;
average = average / 5;
return average;
}   

【讨论】:

  • 太棒了,我只是错过了每个单独声明前面的“int”。我是否也需要在函数中声明所有内容?我现在收到一条错误消息,指出“ratingOne”等未在此范围内声明
  • 我声明了“int ratingOne;”等在每个函数中,并且该错误消失了。现在剩下的最后一个问题是:“所有三个函数对 'findlowest(int, int, int, int, int)' 的未定义引用
  • 对不起...应该在我发布之前进行编译。不会再发生了:)
  • 是的,我看到了,我之前也添加了这些,只是忘记将其粘贴到原始帖子中:p
【解决方案3】:

好的,所以我想通了,但我不知道为什么。这是我的最终代码。

#include <iostream> // whatever this is
#include <iomanip>
using namespace std;

int getValue();
int findLowest(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive);
int findHighest(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive);
double findAverage(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive);


int main(){  // main function

cout << setw(15)<<""<< "Product Review"; // displays this at the top

int ratingOne = getValue();
int ratingTwo = getValue();
int ratingThree = getValue();
int ratingFour = getValue();
int ratingFive = getValue();
int low = findLowest(ratingOne, ratingTwo, ratingThree, ratingFour, ratingFive);
int high = findHighest(ratingOne, ratingTwo, ratingThree, ratingFour, ratingFive);
double average = findAverage(ratingOne, ratingTwo, ratingThree, ratingFour, ratingFive);

cout << "\nThe highest rating received was: " << high;
cout << "\nThe lowest rating received was: " << low;
cout << std::fixed << std::setprecision(2) << "\nThe average rating received among 5 users was: " << average;
}

int getValue(){
int rating; 

do {
cout << "\nOn a scale of 1 to 10, how would you rate our product? ";
cin >> rating; 

    if (rating < 1 || rating > 10) {cout << "\nYou have entered an invalid number. Please try again.";}
}

while (rating < 1 || rating > 10);
return rating;
}

int findLowest(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive){
int low = 11;
if (ratingOne < low) { low = ratingOne; }
if (ratingTwo < low) { low = ratingTwo; }
if (ratingThree < low) { low = ratingThree; }
if (ratingFour < low) { low = ratingFour; }
if (ratingFive < low) { low = ratingFive;}
return low;
}
int findHighest(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive){
int high = 0;
if (ratingOne > high) { high = ratingOne; }
if (ratingTwo > high) { high = ratingTwo; }
if (ratingThree > high) { high = ratingThree; }
if (ratingFour > high) { high = ratingFour; }
if (ratingFive > high) { high = ratingFive; }
return high;
}
double findAverage(int ratingOne, int ratingTwo, int ratingThree, int ratingFour, int ratingFive){
double average;
average = ratingOne + ratingTwo + ratingThree + ratingFour + ratingFive;
average = average / 5;
return average;
}

我以前有这个作为我的代码,它给了我上面讨论的错误。 int findLowest(){...}

我还通过在 () 中说“int”5 次来编译程序,但是这些值在天文数字上是不正常的。我输入了 1-10 的 5 个数字,结果类似于 24908140489、-301213901398、489723498234 或其他。不知道为什么会发生这种情况,但可能是存储号码的默认值并且出了点问题。应该保存该编辑以回顾它,因为现在我不知道是什么导致它发生。至少现在可以了,感谢您的帮助!

【讨论】:

    猜你喜欢
    • 2020-09-10
    • 2015-10-30
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多