我有一个类CPerson
,我想用对象变量初始化CPerson
类型的向量。然而编译器说type name is not allowed
。我想问一下为什么会这样?
class CPerson {
protected:
string m_strName;
Sex m_Sex;
Titles m_Title;
public:
CPerson() {
m_strName = "Peter Petrov";
m_Sex = male;
m_Title = bachelor;
}
//добавяме параметричен к-р
CPerson(string n,Sex s,Titles t) {
m_strName = n;
m_Sex = s;
m_Title = t;
}
~CPerson() {}
void SetName(string strName) {
m_strName = strName;
}
void SetSex(Sex sex) {
m_Sex = sex;
}
void SetTitle(Titles title) {
m_Title = title;
}
string GetName() const {
return m_strName;
}
};
int main(){
vector <CPerson> perr = { CPerson p1,
CPerson p2("I.Ivanov", male, professor),
CPerson p3("A.Stoyanova", female, assistant),
CPerson p4("A.Dimitrova", female, assistant)}
return 0;
}
您的代码中有很多问题。以下是成功编译的代码版本:
// 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;
}
除了缺少Sex和Titles的类型之外,主要问题还在向量初始值设定项的语法上。我假设您试图使用初始值设定项列表,但您的语法完全错误。看起来您只是将变量声明/初始化语句复制到其中,但您需要创建CPerson
类的新实例。然后,这些实例将被复制到向量中。
CPerson p2("I.Ivanov", male, professor)
声明并初始化堆栈上CPerson
类的名为p2
的变量,但此语法在初始化器列表中无效,因为不允许在其中声明变量。而是使用
CPerson("I.Ivanov", Sex::male, Titles::professor)
这将创建CPerson
的一个实例,然后将该实例复制到向量中。