В вашем коде много проблем.Вот версия кода, которая успешно компилируется:
// Example program
#include <iostream>
#include <string>
#include <vector>
enum class Sex {
male, female
};
enum class Titles {
bachelor,
assistant,
professor
};
class CPerson {
protected:
std::string m_strName;
Sex m_Sex;
Titles m_Title;
public:
CPerson() {
m_strName = "Peter Petrov";
m_Sex = Sex::male;
m_Title = Titles::bachelor;
}
//добавяме параметричен к-р
CPerson(std::string n,Sex s,Titles t) {
m_strName = n;
m_Sex = s;
m_Title = t;
}
void SetName(std::string strName) {
m_strName = strName;
}
void SetSex(Sex sex) {
m_Sex = sex;
}
void SetTitle(Titles title) {
m_Title = title;
}
std::string GetName() const {
return m_strName;
}
};
int main(){
std::vector <CPerson> perr({
CPerson(),
CPerson("I.Ivanov", Sex::male, Titles::professor),
CPerson("A.Stoyanova", Sex::female, Titles::assistant),
CPerson("A.Dimitrova", Sex::female, Titles::assistant)
});
return 0;
}
Помимо отсутствующих типов для Пола и Титулов, основная проблема заключалась в синтаксисе вашего векторного инициализатора.Я предполагаю, что вы пытались использовать список инициализаторов, но ваш синтаксис был неверным.Похоже, вы просто копировали в нее операторы объявления / инициализации переменных, но вам нужно создать новые экземпляры вашего CPerson
класса.Затем эти экземпляры будут скопированы в вектор.
CPerson p2("I.Ivanov", male, professor)
Объявляет и инициализирует переменную с именем p2
класса CPerson
в стеке, но этот синтаксис недопустим в списке инициализаторов, так как выВам не разрешено объявлять переменные там.Вместо этого используйте
CPerson("I.Ivanov", Sex::male, Titles::professor)
Это создает экземпляр CPerson
, и этот экземпляр затем копируется в вектор.