main函数中引用构造函数,enum类型参数显示未定义标识符

main函数中FRESHMAN显示未定义标识符。(不能更改main函数)

#include<iostream>
#include<string>
using namespace std;
class Person {
public:
    Person(string n, char s) {
        name = n;
        sex = s;
    }
    void print() {
        cout << "Name:" << name << ", Sex:" << sex << endl;
    }
protected:
    string name;
    char sex;
};

class Student :public Person {
private:
    enum sta { FRESHMAN = 0, SOPHOMORE, JUNIOR, SENIOR }status;
public:
    Student(string n,char s,sta st) :Person(n, s) {
        status = st;
    }
    void print() {
        cout << "Name:" << name << ", Sex:" << sex << endl;
        cout << "Status:" << status;
    }
};

int main() {
    Person person("ZhangSan", 'M');
    Student student("LiSi", 'F',FRESHMAN);
    person.print();
    student.print(); 
    return 0;
}

在类中定义枚举类型,那么作用域就仅限类中,main函数中并不知道FRESHMAN是什么。

把enum放外面

#include<iostream>
#include<string>
using namespace std;
class Person {
    public:
        Person(string n, char s) {
            name = n;
            sex = s;
        }
        void print() {
            cout << "Name:" << name << ", Sex:" << sex << endl;
        }
    protected:
        string name;
        char sex;
};

enum sta { FRESHMAN = 0, SOPHOMORE, JUNIOR, SENIOR } status;
class Student :
    public
        Person {

    public:
        Student(string n,char s,sta st) :Person(n, s) {
            status = st;
        }
        void print() {
            cout << "Name:" << name << ", Sex:" << sex << endl;
            cout << "Status:" << status;
        }
};

int main() {
    Person person("ZhangSan", 'M');
    Student student("LiSi", 'F',FRESHMAN);
    person.print();
    student.print();
    return 0;
}