gpt4 book ai didi

c++ - 构建成对 vector 时出现编译器错误

转载 作者:太空宇宙 更新时间:2023-11-04 15:18:20 26 4
gpt4 key购买 nike

请有人帮助解释为什么在 OS X 上使用 Xcode 5.1 编译以下代码时出现错误。Apple LLVM 版本 5.1 (clang-503.0.40)(基于 LLVM 3.4svn)。

我想在下面构造 X,向它传递一个对 vector 。

#include <iostream>
#include <string>
#include <vector>
#include <utility>

struct X
{
public:
typedef std::vector<std::pair<std::string, std::string>> VectorType;

X(VectorType& params) : m_params(params)
{
}

VectorType m_params;
};

int main(int argc, const char * argv[])
{
X::VectorType pairs
{
{ "param-1", "some-string-1"}, // pair 0
{ "param-2", "some-string-2"}, // pair 1
{ "param-3", "some-string-3"}, // pair 2
{ "param-4", "some-string-4"}, // pair 3
{ "param-5", "some-string-5"}, // pair 4
{ "param-6", "some-string-6"}, // pair 5
{ "param-7", "some-string-7"} // pair 6
};

X x
{
{pairs[0], pairs[2], pairs[5]}
};

return 0;
}

报错是:

/main.cpp:37:7: error: no matching constructor for initialization of 'X'
X x
^
/main.cpp:6:8: note: candidate constructor (the implicit move constructor) not viable: cannot convert initializer list argument to 'X'
struct X
^
/main.cpp:6:8: note: candidate constructor (the implicit copy constructor) not viable: cannot convert initializer list argument to 'const X'
struct X
^
/main.cpp:11:5: note: candidate constructor not viable: cannot convert initializer list argument to 'VectorType &' (aka 'vector<std::pair<std::string, std::string> > &')
X(VectorType& params) : m_params(params)
^
1 error generated.

最佳答案

你的构造函数应该通过 const 引用来获取它的参数

X(VectorType const & params)
^^^^^

否则,您无法传递临时 vector (正如您尝试做的那样),因为临时 vector 无法绑定(bind)到非常量 lvalue 引用。

关于c++ - 构建成对 vector 时出现编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26144299/

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