2017-10-16 10 views
0

私は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宣言しようとしたが、それは未定義の参照を言うだろう。

何が間違っているかも知りませんか?

+0

[ask]を読んで[mcve]を入力してください。 – rustyx

答えて

0

Set::find関数はSetIterator<T>を返します。Tはセットの型です。 intSetIterator<T>を割り当てようとしていますが、これは不可能です。イテレータを逆参照して、それが指す値(*it)を得ることができますが、stringのセットがあるので、stringintではありません。

あなたは、文字列の助言を与えることを誰のためSet実装を十分に提供していませんでしたが、あなたはintfindの結果を割り当てるべきではありません - それは同じの何かにSetIterator<string>に割り当てると比較すべきですタイプ。

関連する問題