我希望创建一个 MyClass 的 vector ,如以下 Course 类。 我希望传递一个字符串数组作为类(class)名称。所以我写
struct Course {
int id;
string name;
static int id_generator;
Course() {}
Course(string s);
};
Course::Course(string s) {
name = s;
id = id_generator++;
}
int Course::id_generator = 0;
这行得通
string course_names[] = {"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"};
vector<Course> course_vector(begin(course_names), end(course_names));
但这不是
vector<Course> course_vector = {"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"};
error: could not convert ‘{"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<Course>’
为什么?如何做得更好?
最佳答案
用于聚合类型作为数组的聚合初始化:
string course_names[] = {"Linux", "C++", "HTML", "HTML5", "NodeJS", "Shell", "Python"};
不同于initializer_list
初始化。 std::vector
提供一个接受 std::initializer_list<T>
的构造函数,这就是当您尝试初始化 vector
时调用的构造函数带牙套。为了使其正常工作,每个元素都需要额外的大括号:
std::vector<Course> course_vector = {{"Linux"},
{"C++"},
{"HTML"},
{"HTML5"},
{"NodeJS"},
{"Shell"},
{"Python"}};
此外,我最好将构造函数更改为:
Course::Course(std::string const &s) : id(id_generator++), name(s) { }
关于c++ - 使用硬编码元素初始化 std::vector<MyClass> 的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34898633/