次のコード セグメントで奇妙なエラーが発生しているようです (余分なヘッダー ファイルと空の main 関数は無視してください。ここに投稿するために、この問題をコンパイル可能な .cpp ファイルに分離したかっただけです)。「[私が定義した型]」から非スカラー型「[私が定義した型]」へのエラー変換を示しています。
この特定の例のコードは、文字列のリストのセットを 1 つの入力パラメーター (入力という名前) として受け取り、文字列のリストへの参照を別のパラメーター (出力という名前) として受け取り、その中から文字列の最も長い共通プレフィックス リストを計算することになっています。リストを入力し、結果を出力に格納します。
コンパイラ エラー メッセージ (対応する行にコメントとして含まれているのは次のとおりです。
lcp.cpp:28:47: エラー: '<code>std::list<std::basic_string<char> >::const_iterator {aka std::_List_const_iterator<std::basic_string<char> >}' からの変換非スカラー型 '<code>std::list<std::basic_string<char> >::iterator {aka std::_List_iterator<std::basic_string<char> >}' が要求されました
そして、実際のプログラムは次のとおりです。
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <list>
using namespace std;
void getLongestCommonPrefix(set <list <string> > & input, list <string> & output)
{
set <list <string> > :: iterator it = input.begin();
output = *it;
for(; it != input.end(); ++it)
{
if(output.size() > (*it).size())
{
list <string> :: iterator it1 = output.begin();
advance(it1, (*it).size()-1);
output.erase(it1, output.end());
}
list <string> :: iterator it1 = output.begin();
list <string> :: iterator it2 = (*it).begin(); //lcp.cpp:28:47: error: conv ersion from ‘std::list<std::basic_string<char> >::const_iterator {aka std::_List_const_iterator<std::basic_string<char> >}’ to non-scalar type ‘std::list<std::basic_string<char> >::iterator {aka std::_List_iterator<std::basic_string<char> >}’ requested
for(; it1 != output.end(); ++it1,++it2)
{
if(*it1 != *it2)
break;
}
output.erase(it1, output.end());
if(!output.size())
return;
}
}
int main()
{
return 0;
}
この種のエラーが発生する理由と時期、および回避策について、ここの専門家から聞きたいです。