c++11 - 错在哪里?
问题描述
编译器错误 错误 C2440 '=': 无法从 'const std::basic_string,std::allocator>' 转换为 'const char *'
int main(void)
{
/*
complier error
Error C2440 '=': cannot convert from 'const std::basic_string<char,std::char_traits<char>,std::allocator<char>>' to 'const char *'
primer C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\VC\Tools\MSVC\14.22.27706\include\xutility 1745
*/
list<string> names = {"A","B"};
vector<const char*> vnames;
vnames.assign(names.cbegin(), names.cend());//OK
/*for (auto it = names.cbegin(); it != names.cend(); ++it)
{
cout << *it << endl;
}*/
for (auto it = vnames.cbegin(); it != vnames.cend(); ++it)
{
cout << *it << endl;
}
cout << "hello world" << endl;
return 0;
}
解决方案
这:
vnames.assign(names.cbegin(), names.cend());//OK
您的评论说“OK”,但它不正确。您不能将std::string
对象分配给对象const char*
。如果要获取每个的 C 字符串指针std::string
并将其放入vnames
中,则必须:
for (const auto& i : names) {
vnames.push_back(i.c_str());
}
之后,您需要非常小心,不要以names
任何会导致重新分配的方式修改向量。这样做会使存储在vnames
.
推荐阅读
- r - 用 R 中的匹配名称替换基于向量的矩阵值
- mongodb - Pymongo find() 与“$toString”投影运算符
- php - 难以将其他扩展加载到 Azure 上的 php 实例中
- elasticsearch - 及时将多个日志从filebeat发送到logstash
- c# - 在 C# 中更改长日期格式
- bash - Bash:我如何(1)从包含一列数字的文件中的“i”行中读取一个数字,以及(2)将值分配给一个变量?
- c# - 如何使用字符串数组在 DataGridView 上添加多个列?
- oracle-sqldeveloper - HR Schema 示例数据库,展开表树时不显示 HR 表?
- c++ - 计算大于向量中数字的元素
- c++ - 如何仅从源代码构建 TensorFlow lite 而不是所有 TensorFlow?