Когда вы пишете внутри своего класса:
CStudent();
CStudent(string name, string fn);
... вы только объявляете два конструктора, один по умолчанию (без аргументов) и один с двумя строками.
После их объявления вам необходимо определить их так же, как вы определили методы getName
или getAverage
:
// Outside of the declaration of the class
CStudent::CStudent() { }
// Use member initializer list if you can
CStudent::CStudent(std::string name, string fn) :
name(std::move(name)), fn(std::move(fn)) { }
В C ++ вы также можете определить их при объявлении их внутри класса:
class CStudent {
// ...
public:
CStudent() { }
CStudent(std::string name, string fn) :
name(std::move(name)), fn(std::move(fn)) { }
// ...
};
Начиная с C ++ 11, вы можете позволить компилятору сгенерировать конструктор по умолчанию для вас:
// Inside the class declaration
CStudent() = default;