函数调用C ++

时间:2018-10-23 01:51:56

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

你好,我是一名学习c ++的学生,我才刚刚开始学习OOP。问题出在我的主文件中,但是如果所有文件都来自另一个文件,我将显示所有文件。

我已经写了我的hpp和cpp文件,现在我只是在进行主测试。该类称为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;
}

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

您输入的代码错误。在创建框对象期间,框的尺寸是已知的。长度,宽度和高度已经可用-在成员变量中更新。

函数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();

答案 2 :(得分:0)

我已经解决了问题。我在代码中的所有位置都删除了calcVolume和calcSurfaceArea中的参数,并解决了该错误。