【发布时间】:2021-09-30 08:13:48
【问题描述】:
我制作了一个小型控制台程序,它有一个名为 Class_Room 的类。我可以用它制作学校教室的对象,并在其中存储学生姓名、卷号和年龄。学生数据存储在地图中。我想做这样的教室对象:
Class_Room class8C = {
{"student x", 2}, //2 for rollnumber
{"student y", 3}
};
所以我做了一个转换构造函数:
Class_Room(std::map<int, std::string> map) {
for (std::pair<int, std::string> value : map) {
student_data[value.first] = { value.second, "NIL" };
}
}
但我得到错误: 没有构造函数 Class_Room::Class_Room 的实例与参数列表匹配
“正在初始化”:无法将“初始化列表”转换为 Class_Room
这是我的全部代码:
#include <iostream>
#include <vector>
#include <string>
#include <map>
class Class_Room {
public:
Class_Room(std::map<int, std::string> map) {
for (std::pair<int, std::string> value : map) {
student_data[value.first] = { value.second, "NIL" };
}
}
void new_student(int roll, std::string name, int age = 0)
{
data.clear();
data.push_back(name);
if (age != 0) {
data.push_back(std::to_string(age));
}
else {
data.push_back("NIL");
}
student_data[roll] = data;
}
std::map<int, std::vector<std::string>> get_student_data_map()
{
return student_data;
}
private:
std::map<int, std::vector<std::string>> student_data;
std::vector<std::string> data;
};
std::ostream& operator<< (std::ostream& output, Class_Room classroom)
{
std::map<int, std::vector<std::string>> student_data = classroom.get_student_data_map();
for (std::pair<int, std::vector<std::string>> value : student_data) {
output << value.first << " => " << value.second[0] << ", " << value.second[1] << "\n";
}
return output;
}
int main() {
Class_Room class8C = {{"Ihsan", 2}};
std::cout << class8C;
}
我是 C++ 的初学者,不知道出了什么问题,任何帮助将不胜感激。
【问题讨论】:
-
您有错字和缺少外括号:
Class_Room class8C = { {{2, std::string("Ihsan")}}};
标签: c++