deque.at 无匹配函数
Posted
技术标签:
【中文标题】deque.at 无匹配函数【英文标题】:deque.at No Maching Function 【发布时间】:2022-01-17 15:16:18 【问题描述】:我正在尝试从 deque 数据结构中 deque(字符串元素)。但我得到了错误:
错误:没有匹配函数调用 'std::__cxx11::basic_string::basic_string(__gnu_cxx::__alloc_traitsstd::allocator<:array> >, std::arraystd::__cxx11::basic_string
>::value_type&)' 26 |字符串记录 = (string)records.at(0);
deque<array<string, 1>> records;
string data("hello this is 1st record");
array<string, 1> bufferdata;
records.push_back(buffer);
string record = (string)records.at(0); //error is reported at this line
printf("%s\n", record.c_str());
谁能给我一个提示我做错了什么。 作为背景,我必须缓存最后 100 条短信,所以我为此目的使用了 deque。
【问题讨论】:
你的双端队列不包含字符串;它拥有array<string,1>
。并且强制转换(string)records.at(0);
不是尝试解决这个问题的方法。 string record = records.at(0).at(0);
会得到你的字符串,虽然我无法理解你为什么首先使用 array<string,1>
作为队列元素。
records.at(0)
不是字符串,而是array<string,1>
。不要使用 C 类型转换,它们是邪恶的
array
只能容纳一个元素,为什么还要使用它?
使用像 (string)
这样的 C 类型转换几乎总是表明你做错了什么
每当您觉得需要进行 C 风格转换(就像您使用 (string)records.at(0)
一样)时,您应该将其视为您做错了什么的迹象。
【参考方案1】:
目前还不清楚您为什么使用array
作为元素。 at
返回的值不是字符串而是数组。
deque<array<string, 1>> records;
string data("hello this is 1st record");
array<string, 1> bufferdata;
records.push_back(buffer);
string record = records.at(0)[0];
^^ get first element in deque
^^ get first element in array
不要使用 c 风格的强制转换 ((string)...
)。它们几乎总是错误的(如果不是,则应该用更安全的 C++ 强制转换替换它们)。如果你不使用数组(为什么?当它只包含一个元素时?)代码是
deque<string> records;
string data("hello this is 1st record");
records.push_back(data);
string record = records.at(0);
^^ get first element in deque
【讨论】:
以上是关于deque.at 无匹配函数的主要内容,如果未能解决你的问题,请参考以下文章