Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Ошибка компиляции: Выражение должно представлять класс или структуру

#cpp #visual_cpp


При компиляции выдаётся следующая ошибка:


  выражение слева от .print должно представлять класс, структуру или объединение.


Код:

class Object
{
private:
    char* name;
    char* teacher;
    short int hours;
    char* exam;
    float mark;

public:
    Object::Object()
    {
        Object::name = "unknown"; 
        Object::teacher = "unknown";
        Object::hours = 0;
        Object::exam = "unknown";
        Object::mark = 0;
    }

    Object::Object(char *n)
    {
        Object::name = n;
        Object::teacher = "Unknown";
        Object::hours = 0;
        Object::exam = "unknown";
        Object::mark = 0;
    }

    void Object::print()
    {
        std::cout << name << std::endl;
        std::cout << teacher << std::endl;
        std::cout << hours << std::endl;
        std::cout << exam << std::endl;
        std::cout << mark << std::endl;
    }
};

void main()
{
    Object Program1();
    Program1.print();
}

    


Ответы

Ответ 1



Это канонический пример most vexing parse. Вы, согласно правилам языка, объявили не экземпляр класса, а прототип функции с пустым списком аргументов, возвращающей Object. Уберите лишние скобки после Program1. Object Program1; Уточнение: чтобы не думать о случае отсутствия конструкторов, лучше писать так: Object Program1{}; (по причинам, сходным с этими), если ваша версия компилятора это позволяет.

Ответ 2



Этот код вообще не соберётся... (в gcc точно) 1) Не нужно везде писать Object:: внутри класса 2) main() должна возвращать int 3) Object Program1(); переделайте в Object Program1; Вобщем вот так... #include class Object { private: char* name; char* teacher; short int hours; char* exam; float mark; public: Object() { name = "unknown"; teacher = "unknown"; hours = 0; exam = "unknown"; mark = 0; } Object(char *n) { name = n; teacher = "Unknown"; hours = 0; exam = "unknown"; mark = 0; } void print() { std::cout << name << std::endl; std::cout << teacher << std::endl; std::cout << hours << std::endl; std::cout << exam << std::endl; std::cout << mark << std::endl; } }; int main() { Object Program1(void); Program1.print(); return 1; } По поводу скобочек... Вы сделали не то что хотели. Хотели вызвать конструктор объекта,а у вас получилось объявление функции. Object Program1(void); п.с. Мне кажется у Вас какая-то неправильная книжка по c++...

Комментариев нет:

Отправить комментарий