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&lt;string,1&gt;。并且强制转换(string)records.at(0); 不是尝试解决这个问题的方法。 string record = records.at(0).at(0); 会得到你的字符串,虽然我无法理解你为什么首先使用 array&lt;string,1&gt; 作为队列元素。 records.at(0) 不是字符串,而是array&lt;string,1&gt;。不要使用 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 无匹配函数的主要内容,如果未能解决你的问题,请参考以下文章

访问:在查询条件中使用布尔函数的数据类型不匹配

图像轮廓之形状匹配

EXCEL VLOOKUP函数正确,结果却总是#N/A 或无结果

命令执行总结

重载函数的参数匹配与转换

C函数尝试匹配