При компиляции выдаётся следующая ошибка:
выражение слева от .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{}; (по причинам, сходным с этими), если ваша версия компилятора это позволяет.
Комментариев нет:
Отправить комментарий