繁体   English   中英

不存在从“ std :: string”到“ char”的适当转换

[英]no suitable conversion from “std::string” to “char” exists

我正在为一个学校项目工作,但遇到了一个问题(标题中有错误)。

这是发生错误的代码行:

kruskalS[n].nodeList[m].push_back(tempFirstCity);

kruskalS是一个结构,而nodeList是该结构中string类型的向量,我正尝试将tempFirstCity (也是string )插入该数组中。

自从4月以来我没有进行任何编程,所以我很容易犯一个基本的错误。 任何帮助将不胜感激,如果需要,我愿意从程序中发布更多信息。

std::stringchar容器(的一种)。 push_back函数用于将一个元素添加到容器的末尾。 因此,当您调用kruskalS[n].nodeList[m].push_back(tempFirstCity); ,则表示您要尝试在名为kruskalS[n].nodeList[m]string的末尾添加一个元素。 因此,编译器期望一个元素为char

如果您知道tempFirstCity不为空,并且想要将tempFirstCity的第一个char添加到kruskalS[n].nodeList[m]的末尾(包括您知道tempFirstCity.size() == 1 ),则可以做

kruskalS[n].nodeList[m].push_back(tempFirstCity[0]);

如果要在任何当前内容之后添加整个字符串,则可以执行

kruskalS[n].nodeList[m] += tempFirstCity;

如果您预期没有当前内容和/或只想用tempFirstCity字符串替换已经存在的tempFirstCity ,则可以

kruskalS[n].nodeList[m] = tempFirstCity;

您可以使用:

std::string::c_str()

它返回一个const char *

您说nodeList是一个字符串类型的数组。 std::string nodeList[x]其中x是一个常数。

然后为该数组分配一个新元素,其中m <x如下:

kruskalS[n].nodeList[m] = tempFirstCity;


根据评论:

对于追加到向量的末尾,您不需要索引m:

vector<string>::iterator itr = nodeList.begin();
for (int i = 0; i < m; i++)
  itr++;
nodeList.insert(itr, tempFirstCity);

对于在索引m处插入:

 vector<string>::iterator itr = nodeList.begin(); for (int i = 0; i < m; i++) itr++; nodeList.insert(itr, tempFirstCity); 

在C ++中,可以使用string::c_str()将字符串转换为C编程char数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM