用C++中的CPerson(类)类型的对象初始化STL矢量

Initialize a STL vector with object of type CPerson (class) in C++?

本文关键字:对象 初始化 STL 矢量 类型 中的 C++ CPerson      更新时间:2023-10-16

我有一个类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的一个实例,然后将该实例复制到向量中。