私はC++を初めて使用していますが、私はこのGoFishプロジェクトをやっています。次のエラーメッセージと私はそれを修正することはできません。 )エラー: 'SetIteratorの引数1を初期化しています<T> :: SetIterator(T *)[T = std :: basic_stringと<char>]'
void testFind()
{
try
{
Set <string> s1;
// fill the Set with text
cout << "Enter text, type \"quit\" when done\n";
string text;
do
{
cout << "\t" << s1 << " > ";
cin >> text;
if (text != "quit")
s1.insert(text);
}
while (text != "quit");
// make a copy of the set using the copy constructor
Set <string> s2(s1);
// look for an item in the set
cout << "Find items in the set and delete.\n";
cout << "Enter words to search for, type \"quit\" when done\n";
cout << "\t" << s1 << " > ";
cin >> text;
do
{
int itEmpty = -1;
int itFind = s1.find(text);
if (itFind != itEmpty)
{
cout << "\tFound and removed!\n";
s1.erase(itFind);
}
else
cout << "\tNot found\n";
cout << "\t" << s1 << " > ";
cin >> text;
}
while (text != "quit");
// show the list again
cout << "The remaining set after the items were removed\n";
cout << "\t" << s1 << endl;
// show the list before the items were removed
cout << "The items in the set before the items were removed\n";
cout << "\t" << s2 << endl;
}
catch (const char * sError)
{
cout << sError << endl;
}
#endif // TEST3
}
、これはset.hファイルであり、機能は(見つける)と(消去:これはエラーメッセージです:
week05.cpp: In function ‘void testFind()’: week05.cpp:241:35: error: cannot convert ‘SetIterator<std::basic_string<char> >’ to ‘int’ in initialization int itFind = s1.find(text); ^ week05.cpp:245:28: error: invalid conversion from ‘int’ to ‘std::basic_string<char>*’ [-fpermissive] s1.erase(itFind); ^ In file included from week05.cpp:17:0: set.h:93:3: error: initializing argument 1 of ‘SetIterator<T>::SetIterator(T*) [with T = std::basic_string<char>]’ [-fpermissive] SetIterator(T* p) : p(p) {} ^ make: *** [week05.o] Error 1
そして、これはtestFind()関数です。
template <class T>
SetIterator<T> Set <T> :: find(const T & t) const throw (const char *)
{
SetIterator<T> loc;
//Linear Search
for(loc=begin(); loc!=end(); loc++)
{
if(*loc==t)
return loc;
}
return loc;
}
template<class T>
void Set<T> :: erase(SetIterator<T> item)
{
for (int i = 0; i < numItems; i++)
{
if (data[i] == *item)
{
data[i] = data[--numItems];
}
}
sort();
}
私は(testFindのためのテンプレートを置く)とTの代わりにintとしてitFind宣言しようとしたが、それは未定義の参照を言うだろう。
何が間違っているかも知りませんか?
[ask]を読んで[mcve]を入力してください。 – rustyx