gpt4 book ai didi

c++ - list 和 string 之间的构造函数不明确

转载 作者:太空狗 更新时间:2023-10-29 23:13:18 24 4
gpt4 key购买 nike

在下面的代码中,当我尝试将列表传递给构造函数时,编译器给我一个错误:

#include <string>
#include <iostream>
#include <list>


class MyClass {
std::list<std::string> strings;

public:
void disp() {
for (auto &str : strings)
std::cout << str << std::endl;
}

MyClass(std::string const &str)
: strings({str}) {}

MyClass(std::list<std::string> const &strlist)
: strings(strlist) {}
};


int main ()
{
// Compiles well:
MyClass c1("azerty");
c1.disp();

// Compilation error, "call to constructor of 'MyClass' is ambiguous":
MyClass c2({"azerty", "qwerty"});
c2.disp();

return 0;
}

我试图将 explicit 添加到构造函数的声明中,但它并没有改变任何东西。

最佳答案

问题是 string 有这个构造函数:

template< class InputIt >
basic_string( InputIt first, InputIt last,
const Allocator& alloc = Allocator() );

which {"azerty", "qwerty"} 是一个不幸的匹配,因为 const char* 实际上是一个输入迭代器......即使两个参数不是迭代器,也不是同一容器中的迭代器。

一个解决方案是只提供一个构造函数,它接受一个初始化列表并只使用那个:

MyClass(std::initializer_list<std::string> il)
: strings(il.begin(), il.end())
{ }

关于c++ - list<string> 和 string 之间的构造函数不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40262087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com