элемент данных недоступен, даже если класс был объявлен как дружественный класс

#c

#c

Вопрос:

Элемент данных недоступен, даже если класс был объявлен как дружественный класс. ошибка: ‘total’ не был объявлен в этой области

 #include <iostream>
#include <iomanip>
using namespace std;

class Produce
{
    private:
        float total;
    public:
        Produce()
        {
            total=0;
        }
        friend class Bill;
};
class Bill
{
    private:
        float grand_total;
    public:
    Bill()
    {
        grand_total=0;
    }
    Bill operator =(const Produce amp;p)
    {
        return Bill(total p.total);
    }
};
  

Ответ №1:

Сообщение об ошибке правильное: total в текущей области нет имени. Код должен либо ссылаться на grand_total , который является членом класса Bill , который, в свою очередь, определяет operator = записываемый, либо он должен ссылаться на p.total , чтобы получить доступ к total члену класса Produce .

Ответ №2:

Превращение класса A в друга класса B не означает, что вы можете просто случайным образом называть нестатические члены B изнутри A , не называя экземпляр B для использования.

Какой Produce::total (из потенциально бесконечных) вы хотите, чтобы ваша программа использовала?