Функция несоответствия C ++ для вызова - PullRequest
0 голосов
/ 28 февраля 2019

Могу ли я знать, что не так с кодами?

#include <iostream>

using namespace std;

class Vehicle
{
    double price = 0;
public:
    void setPrice(double p)
    {
        price = p;
    }
    double comparePrices(const Vehicle&, Vehicle&);
};

double Vehicle::comparePrices(const Vehicle& car1, Vehicle& car2)
{
    cout << "Enter the price for the used car: ";
    double price;
    cin >> price;
    car2.setPrice(price);
    return car1.price - car2.price;
}

int main()
{
    Vehicle newCar, usedCar;
    double diff;
    newCar.setPrice(38000);
    diff = newCar.comparePrices(newCar, usedCar);
    cout << "Used car price is $" << usedCar.setPrice();
    cout << ", the difference is $" << diff << endl;
}

После выполнения я получаю эту ошибку

Ошибка: нет соответствующей функции для вызова функции Vehicle :: setPrice () '|

Ответы [ 4 ]

0 голосов
/ 28 февраля 2019

cout << "Цена подержанной машины - $" << usedCar.setPrice (); </p>

Вместо этого просто добавьте метод доступа getPrice (), который просто возвращает цену автомобиля.Это должно работать тогда.setPrice () требует, чтобы параметр был передан, но вы ничего ему не даете, когда его занимаетесь.

0 голосов
/ 28 февраля 2019

setPrice принимает значение double как параметр, но вы вызвали его без параметра

cout << "Used car price is $" << usedCar.setPrice()

, поэтому сигнатура функции не совпадает.

0 голосов
/ 28 февраля 2019

Я вижу несколько неправильных вещей:

using namespace std;

Выйдите из привычки использовать это.См. Почему «использование пространства имен std» считается плохой практикой? .

double comparePrices(const Vehicle&, Vehicle&);

comparePrices() - это метод не static, что означает, что вам нужновызывать его для Vehicle объекта, а также передавать два Vehicle объекта в качестве входных параметров.Это немного расточительно и излишне.Либо сделайте comparePrices() статическим, либо удалите один из параметров Vehicle и используйте неявный параметр this для доступа к вызываемому объекту.

Кроме того, только с точки зрения дизайна, comparePrices()не должен предлагать пользователю вводить данные.Это задание относится к main() до вызова comparePrices().

cout << "Used car price is $" << usedCar.setPrice();

setPrice() принимает double в качестве ввода, но вы не передаете значение double,Вот на что жалуется ошибка компилятора.

Кроме того, setPrice() не имеет возвращаемого значения, его тип возвращаемого значения void, поэтому вы не можете передать его в operator<<.Вам нужно добавить отдельный метод getPrice() к классу Vehicle, чтобы вернуть его price член.

С учетом сказанного попробуйте вместо этого:

#include <iostream>

class Vehicle
{
private:
    double price = 0;
public:
    double getPrice() const
    {
        return price;
    }

    void setPrice(double p)
    {
        price = p;
    }

    static double comparePrices(const Vehicle&, const Vehicle&);
};

double Vehicle::comparePrices(const Vehicle& v1, const Vehicle& v2)
{
    return v1.price - v2.price;
}

int main()
{
    Vehicle newCar, usedCar;
    double price, diff;

    newCar.setPrice(38000);

    std::cout << "Enter the price for the used car: ";
    std::cin >> price;
    usedCar.setPrice(price);

    diff = Vehicle::comparePrices(newCar, usedCar);
    std::cout << "Used car price is $" << usedCar.getPrice();
    std::cout << ", the difference is $" << diff << std::endl;

    return 0;
}

Или вот это:

#include <iostream>

class Vehicle
{
private:
    double price = 0;
public:
    double getPrice() const
    {
        return price;
    }

    void setPrice(double p)
    {
        price = p;
    }

    double comparePrices(const Vehicle&);
};

double Vehicle::comparePrices(const Vehicle& other)
{
    return price - other.price;
}

int main()
{
    Vehicle newCar, usedCar;
    double price, diff;

    newCar.setPrice(38000);

    std::cout << "Enter the price for the used car: ";
    std::cin >> price;
    usedCar.setPrice(price);

    diff = newCar.comparePrices(usedCar);
    std::cout << "Used car price is $" << usedCar.getPrice();
    std::cout << ", the difference is $" << diff << std::endl;

    return 0;
}
0 голосов
/ 28 февраля 2019
cout << "Used car price is $" << usedCar.setPrice();

эта строка делает ошибки

тип возврата setPrice () is void

вы должны сделать что-то вроде Vehicle :: getPrice () , чтобы получить значение Price.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...