Я получаю сообщение об ошибке в методе GetInfo():
void Quadrangle::GetInfo() {
cout << "Area = " << GetArea() << endl;
cout << GetPerimeter() << endl; //!!!error: no operator matches these operands. operand types are: std::ostream << void
}
double Quadrangle::GetArea() {
return 1.0 / 2 * (d1 * d2 * sin(angle * (M_PI / 180)));
}
void Quadrangle::GetPerimeter() {
cout << "Not enough information provided to calculate a perimeter for a quadrangle" << endl;
}
Я понимаю, что эта ошибка возникает, поскольку GetPerimeter() имеет тип void. Однако я не уверен, смогу ли я перегрузить оператор вставки в этом случае, чтобы исправить эту ошибку.
О верно. Это было просто :) Спасибо!
@anxessorn См. также dupe: Получение этой ошибки в VSCode: ни один оператор "<<" не соответствует этим операндам
Вы пытаетесь вывести сообщение дважды. Вы пытаетесь вывести сообщение из функции GetPerimeter
.
void Quadrangle::GetPerimeter() {
cout << "Not enough information provided to calculate a perimeter for a quadrangle" << endl;
}
И вы пытаетесь вывести возвращаемое значение GetPerimeter
cout << GetPerimeter() << endl;
Но GetPerimeter
ничего не возвращает (это функция void), поэтому вы не можете вывести возвращаемое значение.
Простой ответ — просто вывести сообщение из функции GetPerimeter
. Так что замените
cout << GetPerimeter() << endl;
с
GetPerimeter();
Альтернативой (что для меня не имеет особого смысла) было бы вернуть ту строку, которую вы хотите вывести из GetPerimiter
, например так
string Quadrangle::GetPerimeter() {
return "Not enough information provided to calculate a perimeter for a quadrangle";
}
и теперь это работает, потому что GetPerimeter
действительно что-то возвращает.
cout << GetPerimeter() << endl;
Вы не можете перегрузить оператор для
void
. Но вам не нужно. Заменитеcout << GetPerimeter() << endl;
наGetPerimeter();
и посмотрите, как исчезнет ошибка.