Я вижу несколько неправильных вещей:
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;
}