如何在类中正确声明列表

  • 本文关键字:声明 列表 c++ c++11 c++17
  • 更新时间 :
  • 英文 :


背景:我在大学二年级,我们开始使用类和理解创建一些小应用程序。我正在构建一个雇主类,每个雇主都有4个参数:serial_number,姓名,姓氏,收入,然后还有初级和高级雇主,所有这些都有,但也有其他参数。例如,初级雇主有一组技能和实习生:第一个是初级雇主可以拥有的技能列表,第二个是他们被分配到哪个高级雇主。例如:Junior with serial_number3是Senior with serial_number1的实习生

现在:我利用employer.h做一些简单的事情,但是当我开始声明列表技能时,我就是不明白我应该做什么。

#ifndef JUNIOR_H
#define JUNIOR_H
#include "employer.h"
#include <list>
using namespace std;
class junior : public employer
{
public:
junior(string serial, string name, string surname, double earns, list<string> sk, string in)
: employer(serial, name, surname, earns), skills(sk), intern(in) {}
list<string> getSkills() const { return skills; }
string getIntern() const { return intern; }
private:
list<string> skills;
string intern;
};
#endif // JUNIOR_H

如果我试着在main中写这个,它现在给了我&;没有匹配的构造函数来初始化junior&;我已经包含了标题

junior j("serial3", "name1" , "sur1", 3931, "cpp", "serial1"); 

问题是,构造函数期望第五个参数是list<string>。你只是交了一份普通的string"cpp"。

你可以简单地添加一个带括号的初始化列表作为第五个形参。在您的情况下,只有一个string: "cpp"。这将创建一个包含一个成员"cpp"的list

我还建议将参数限定为const引用。这将避免大量的复制。

那么你的程序看起来像下面这样,并且可以编译。

#include <list>
#include <string>
using namespace std::string_literals;
using namespace std;
struct employer {
string serial{};
string name{};
string surname{};
double earns{};
employer(const string& serialp, const string& namep, const string& surnamep, const double earnsp) :
serial(serialp), name(namep), surname(surnamep), earns(earnsp) {};
};
class junior : public employer
{
public:
junior(const string& serial, const string& name, const string& surname, const double earns, const list<string>& sk, const string& in)
: employer(serial, name, surname, earns), skills(sk), intern(in) {}
list<string> getSkills() const { return skills; }
string getIntern() const { return intern; }
private:
list<string> skills;
string intern;
};
int main() {
junior j("serial3"s, "name1"s, "sur1"s, 3931, { "cpp"s }, "serial1"s);
}

在小型演示项目中使用using namespace std;是可以的。以后你一定要避免这种情况。

我也用了string_literals。这样,"Hello World"s的类型为string

直接写"junior("serial3";name1", "sur1", 3931;" cpp", "serial1");;不junior j("serial3", "name1", 3931岁的"sur1"cpp","serial1");"……你为什么用它写j ?

最新更新