【问题标题】:Too few arguments in function call C++函数调用 C++ 中的参数太少
【发布时间】:2018-10-23 01:51:56
【问题描述】:

您好,我是一名学习 c++ 的学生,我刚刚开始学习 OOP。问题出在我的 MAIN 中,但是我正在显示我的所有文件,以防它来自另一个文件。

我已经编写了我的 hpp 和 cpp 文件,现在我正在我的 main 上进行测试。该类称为 Box,当我创建一个对象 box1 或 box 2 并尝试访问我的函数时,它说有两个参数。不管我是放 box1.calcVolume(double h, double w, double l) 还是 box1.calcVolume();

所以问题出在以下行:

double volume2 = box2.calcVolume();
double volume1 = box1.calcVolume();
double surfaceArea1 = box1.calcSurfaceArea();

如果有人能发现我想念的东西,我们可能不明白,请告诉我。

这是头文件:

#pragma once

#include <iostream>
#ifndef BOX_HPP
#define BOX_HPP

class Box
{
private:
    double height;
    double width;
    double length;

public:
    void setHeight(double h);
    void setWidth(double w);
    void setLength(double l);
    double calcVolume(double h, double w, double l);
    double calcSurfaceArea(double h, double w, double l);
    Box();
    Box(double height, double width, double length);    
}; 
#endif

这是 CPP 文件

#include <iostream>
#include "Box.hpp"

Box::Box()
{
    setHeight(1);
    setWidth(1);
    setLength(1);
}

Box::Box(double h, double w, double l) 
{
    setHeight(h);
    setWidth(w);
    setLength(l);
}

void Box::setHeight(double h)
{
    height = h;
}

void Box::setWidth(double w)
{
    width = w;
}

void Box::setLength(double l)
{
    length = l;
}

double Box::calcVolume(double h, double w, double l)
{
    double volume;
    volume = h * w * l;
    return volume;
}

double Box::calcSurfaceArea(double h, double w, double l)
{
    double surfaceArea;
    surfaceArea = 2 * (h*w) + 2 * (h*l) + 2 * (l*w);
    return surfaceArea;
}

我的 BoxMain 文件:

#include <iostream> 
#include "Box.hpp"

using std::cout;
using std::cin;
using std::endl;

int main()
{
    Box box1(1.1, 2.4, 3.8);
    Box box2;
    box2.setHeight(12);
    box2.setWidth(22.3);
    box2.setLength(2.3);

    double volume2 = box2.calcVolume();

    double volume1 = box1.calcVolume();
    double surfaceArea1 = box1.calcSurfaceArea();
    cout << box1.calcVolume(); << endl;  //testing different methods

    return 0;
}

【问题讨论】:

  • calcVolume() 接受参数。您试图在不传递参数的情况下调用它
  • @GBlodgett 好吧,所以当我尝试 box1.calcVolume(double h, double w, double l);它给了我同样的错误。你指的是这个吗?
  • box2.setWidth(22.3);,你正在调用一个接受一个参数的成员函数并且你正在传递一个值22.3。您编写的其他函数也可以接受参数,但您没有传递任何东西。这是一个错误。
  • 这是一个语法错误。它应该会给你一个不同的错误信息。

标签: c++ function oop object function-call


【解决方案1】:

您的方法采用三个参数:

double Box::calcVolume(double h, double w, double l)
{
    double volume;
    volume = h * w * l;
    return volume;
}

所以,你可以这样称呼它:

Box b;
double volume = b.calcVolume(1, 2, 3);

但这并不完全正确。 Box 的一个实例知道它有多大,因为您将一个大小传递给构造函数,该构造函数将大小存储在字段widthheightlength 中。你可能想要这样的东西:

double Box::calcVolume()
{
    volume = height * width * length;
    return volume;
}

【讨论】:

  • 我试过了,还是报错。你认为我需要在我的 setter 函数中设置 w = width 等而不是 width = w 吗?
  • 您遇到的错误是什么?您是否记得在类声明中调整calcVolume()'s 声明以删除参数?同样的问题也适用于calcSurfaceArea() 方法
  • @RemyLebeau 我在函数调用中得到的参数仍然太少
  • @lauren 你没有回答我的其他问题。史蒂夫的回答显示您从calcVolume()实现 中删除参数,但您是否也从calcVolume()声明 中删除它们以匹配?
  • 在你的程序中任何有calcVolume(的地方(任何地方)都应该紧跟),中间没有任何东西。
【解决方案2】:

您的代码错误。盒子的尺寸在盒子对象的创建过程中是已知的。长度、宽度和高度已经可用 - 在成员变量中更新。

函数calcVolumecalcSurfaceArea 不应接受参数,而应返回计算值。修改代码如下:

double Box::calcVolume()
{
   return height*width*length;
}

double Box::calcSurfaceArea()
{
   return 2*((height*width) + (height*length) + (length*width));
}

另外,记得用上面代码对应的声明修改.hpp文件。

.hpp 文件中的声明应该是

double calcVolume();
double calcSurfaceArea();

【讨论】:

    【解决方案3】:

    我已经解决了这个问题。我删除了代码中各处的 calcVolume 和 calcSurfaceArea 中的参数,它解决了错误。

    【讨论】:

    • 这不是论坛,但格式不同。您应该单击最佳答案旁边的复选标记,然后我建议您查看Help Center
    • @Steve 我是新来的。我确实在最佳答案旁边打了勾。谢谢
    猜你喜欢
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 2017-08-18
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多