Как вызвать функцию внутреннего класса во внешнем классе?

class student
{
private:
    int admno;
    char sname[20];

    class Student_Marks
    {
    private:
        float eng, math, science, computer, Hindi;
        float total;

    public:
        void sMARKS()
        {
            cin >> eng >> math >> science >> computer >> Hindi;
        }

        float cTotal()
        {
            total = eng + math + science + computer + Hindi;
            return total;
        }
    };

public:
    void showData()
    {
        cout << "\n\nAdmission Number :" << admno;
        cout << "\nStudent Name       :" << sname;
        cout << "\nTotal Marks        :" << cTotal();
    }
};

Я хочу вызвать функцию внутреннего класса cTotal() во внешней функции класса showData().

Я получаю сообщение об ошибке при доступе к функции внутреннего класса во внешнем классе.


person NoobMaster69    schedule 13.08.2020    source источник
comment
Вам нужен объект типа Student_Marks для вызова cTotal.   -  person 1201ProgramAlarm    schedule 14.08.2020
comment
Отвечает ли это на ваш вопрос? Способ вызова внутреннего класса внешним классом   -  person DV82XL    schedule 14.08.2020


Ответы (2)


Ваш Student_Marks - это просто определение класса. Не имея объекта класса Student_Marks в student, вы не можете вызвать его член (например, cTotal()).

Вы можете взглянуть на пример кода ниже:

class student
{
private:
    int admno;
    // better std::string here: what would you do if the name exceeds 20 char?
    char sname[20]; 

    class Student_Marks {
        //  ... code
    };
    Student_Marks student; // create a Student_Marks object in student

public:
    // ...other code!
    void setStudent()
    {
        student.sMARKS();  // to set the `Student_Marks`S members!
    }

    void showData() /* const */
    {
        // ... code
        std::cout << "Total Marks  :" << student.cTotal(); // now you can call the cTotal()
    }
};

Также прочитайте: Почему используется пространство имен std; считается плохой практикой?

person JeJo    schedule 13.08.2020

Как только вы назовете его вложенным классом вместо внутреннего класса, вы сможете найти соответствующие ссылки в языковых справочниках. Это всего лишь определение типа внутри области охвата класса, вам нужно создать экземпляр такого класса для работы. Например.

class student
{
    private:
        int admno;
        char sname[20];

    class Student_Marks
    {
        private:
            float eng,math,science,computer,Hindi;
            float total;
        public:
            void sMARKS()
            {
                cout<<"Please enter marks of english,maths,science,computer,science and hindi\n ";
                cin>>eng>>math>>science>>computer>>Hindi;
                
            }
            float cTotal()
            {
                total=eng+math+science+computer+Hindi;
                return total;
            }
    };

    Student_Marks m_marks; // marks of this student

Другая проблема с вашим кодом заключается в том, что в вашем подходе к вводу ввода ужасно отсутствует проверка ошибок...

person Swift - Friday Pie    schedule 13.08.2020