Слишком мало аргументов в вызове функции C ++ - PullRequest
0 голосов
/ 23 октября 2018

Здравствуйте, я учусь на С ++ и только начинаю изучать ООП.Проблема в моей ОСНОВНОЙ, но я показываю все мои файлы на случай, если они из другого файла.

Я написал свой 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 голосов
/ 23 октября 2018

Вы ошиблись кодом.Размеры коробки известны при создании объекта коробки.Длина, ширина и высота уже доступны - обновлено в переменных-членах.

Функции calcVolume и calcSurfaceArea не должны принимать аргументы, а возвращать вычисленное значение.Измененный код ниже:

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

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

Также не забудьте изменить файл .hpp с объявлениями, соответствующими приведенному выше коду.

Объявление в файле .hpp должно быть

double calcVolume();
double calcSurfaceArea();
0 голосов
/ 23 октября 2018

Я решил проблему.Я удалил аргументы в calcVolume и calcSurfaceArea везде в моем коде, и это устранило ошибку.

0 голосов
/ 23 октября 2018

Ваш метод принимает три параметра:

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 знает , насколько он велик, потому что вы передаете размер конструктору, который сохраняет размеры в полях width, height и length.Вы, вероятно, хотите что-то вроде этого:

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