2

私は学校のプロジェクトに取り組んでいますが、少し問題が発生しています (エラーはタイトルにあります)。

エラーが発生するコード行は次のとおりです。

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

kruskalSは構造体であり、構造体内nodeListの型のベクトルであり、その配列に(また)stringを挿入しようとしています。tempFirstCitystring

4 月からプログラミングを行っていないので、簡単に基本的な間違いを犯している可能性があります。必要に応じて、プログラムからもう少し情報を投稿したいと思います。

4

4 に答える 4

6

Astd::stringは(一種の)charsのコンテナです。push_back関数は、コンテナの最後に1つの要素を追加するために使用されます。したがって、を呼び出すときは、呼び出さkruskalS[n].nodeList[m].push_back(tempFirstCity);れたの末尾に1つの要素を追加しようとしていると言います。したがって、コンパイラは1つの要素がであると想定します。stringkruskalS[n].nodeList[m]char

それが空ではないことがわかっていて、最初から最後までtempFirstCityを追加したい場合(知っている場合を含む)、次のことができます。chartempFirstCitykruskalS[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;
于 2012-12-01T05:27:09.907 に答える
5

以下を使用できます。

std::string::c_str()

を返しますconst char *

于 2012-12-01T04:58:23.250 に答える
1

nodeList は文字列型の配列であると言います。つまりstd::string nodeList[x]、x は定数です。

次に、その配列に新しい要素を割り当てます。ここで、m < x は次のとおりです。

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);
于 2012-12-01T05:37:08.123 に答える
-2

C++ では、文字列を C プログラミング配列string::c_str()に変換するために使用できます。char

于 2012-12-01T04:59:15.280 に答える