Оператор print_flower не видит приватные поля класса Flowers
#include <iostream>
class Flowers;
class Name {
public:
void read_name() {
std::cin >> name;
}
void print_name() {
std:: cout << name << std::endl;
}
void print_flower(Flowers flower);
private:
char name[30];
};
class Flowers {
public:
Flowers() {
a = 0;
h = 0;
}
Flowers(int a, int h) {
if (a < 0)
{
std::cout << "Некорректные значение, будет использовано значение по умолчанию" << std::endl;
}
else
{
this->a = a;
}
if (h < 0)
{
std::cout << "Некорректные значение, будет использовано значение по умолчанию" << std::endl;
}
else
{
this->h = h;
}
}
int get_a()
{
return a;
}
int get_h()
{
return h;
}
void set_a(int a)
{
if (a < 0)
{
std::cout << "Некорректные значение, будет использовано значение по умолчанию" << std::endl;
}
else
{
this->a = a;
}
}
void set_h(int h)
{
if (h < 0)
{
std::cout << "Некорректные значение, будет использовано значение по умолчанию" << std::endl;
}
else
{
this->h = h;
}
}
friend bool operator == (Flowers& lv, Flowers& fw);
private:
int a, h; //a = age, h = height
};
bool operator == (Flowers& lv, Flowers& fw)
{
if (lv.a == fw.a && lv.h == fw.h)
{
return false;
}
return true;
}
std::ostream& operator << (std::ostream& out, Flowers& flower)
{
return out << "Возраст: " << flower.get_a() << " Рост:" << flower.get_h();
}
std::istream& operator >> (std::istream& in, Flowers& flower)
{
int a, h;
std::cout << "Введите значение возраста: ";
in >> a;
if (a < 0)
{
std::cout << "Некорректные значение, будет использовано значение по умолчанию" << std::endl;
flower.set_a(0);
}
else
{
flower.set_a(a);
}
std::cout << "Введите значение роста: ";
in >> h;
if (h < 0)
{
std::cout << "Некорректные значение, будет использовано значение по умолчанию" << std::endl;
flower.set_h(0);
}
else
{
flower.set_h(h);
}
return in;
}
int Flowers::get_a() {
return a;
}
int Flowers::get_h() {
return h;
}
void Name::print_flower(Flowers flower) {
std::cout << name << flower.a << flower.h << std::endl;
}
int main() {
setlocale(LC_ALL, "rus");
Flowers myFlowers;
Name myName;
myName.read_name();
myName.print_flower(myFlowers);
std::cout << myFlowers << std::endl;
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Не "не видит", а "не имеет права к нему обратиться". Да и не оператор, а функция-член...
У вас зачем-то целых два раза реализованы get_a()
и get_h()
- так почему бы не воспользоваться ими хотя бы раз:
std::cout << name << flower.get_a() << flower.get_h() << std::endl;
Это решит эту вашу проблему. Вторую - с двойной реализацией - думаю, вы решите сами?
И, кстати, лучше передавать по ссылке, не создавая копию. Сказал бы "по константной ссылке", но, похоже, вы с const
не дружите...