C++类列表声明问题:junior类初始化报‘无匹配构造函数’错误
问题分析与解决方法
错误原因很明确:你调用junior构造函数时,第五个参数传的是字符串字面量"cpp",但你的junior构造函数要求这个参数是list<string>类型,两者无法隐式转换,所以编译器找不到匹配的构造函数。
以下是几种可行的解决方式:
方式1:直接传入列表初始化的list<string>对象
利用C++11及以上支持的列表初始化语法,把"cpp"包装成list<string>对象传入:
junior j("serial3", "name1" , "sur1", 3931, {"cpp"}, "serial1");
注意:如果你的编译器默认没开启C++11,需要手动添加编译选项(比如GCC用-std=c++11或更高版本)。
方式2:提前创建list<string>变量再传入
先构造好包含"cpp"的list<string>对象,再传给构造函数:
list<string> junior_skills{"cpp"}; junior j("serial3", "name1" , "sur1", 3931, junior_skills, "serial1");
方式3:重载junior构造函数
如果希望支持直接传入单个字符串作为技能,可以给junior类添加一个重载的构造函数,在内部把单个字符串转换成list<string>:
// 在junior类的public区域添加这个构造函数 junior(string serial, string name, string surname, double earns, string sk, string in) : employer(serial, name, surname, earns), skills({sk}), intern(in) {}
添加后,你原来的初始化代码junior j("serial3", "name1" , "sur1", 3931, "cpp", "serial1");就能正常运行了。
内容的提问来源于stack exchange,提问作者Irene
相关产品推荐
相关产品推荐

