不存在从"std::string"到"char"的合适转换

no suitable conversion from "std::string" to "char" exists

本文关键字:转换 char string std 不存在      更新时间:2023-10-16

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

下面是遇到错误的代码行:

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

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

我很容易犯一个基本错误,因为我自四月以来就没有做过任何编程。任何形式的帮助将不胜感激,如果需要,我愿意从该计划中发布更多信息。

std::string(有点)是 char s 的容器。 push_back函数用于将一个元素添加到容器的末尾。 所以当你调用kruskalS[n].nodeList[m].push_back(tempFirstCity); 时,你说你正在尝试在string的末尾添加一个元素,称为kruskalS[n].nodeList[m]。 因此,编译器期望一个元素是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字符串替换任何已有的内容,您可以这样做

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

您可以使用:

std::string::c_str()

它返回一个const char *

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

然后将一个新元素分配给该数组,其中 m

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


根据评论:

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

kruskalS[n].nodeList.push_back(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数组。