Страницы

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

четверг, 21 февраля 2019 г.

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

При компиляции выдаётся следующая ошибка:
выражение слева от .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(); }


Ответ

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

Уточнение: чтобы не думать о случае отсутствия конструкторов, лучше писать так: Object Program1{}; (по причинам, сходным с этими), если ваша версия компилятора это позволяет.

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

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