-1

プログラムに問題があります。私は Eclipse を使用していますが、これらのエラーの意味を理解できませんでした。しばらく探していましたが、エラーが見つかりません。ファイルをビルドするときにエラーと問題のリストを表示する 2 つのクラスを添付しました (TransitionTable のスクリーンショットに #endif ステートメントが見つかりませんでした)。助けてくれてありがとう。

最初のクラスでは、コンストラクターでエラーが発生します。

no match for call to `(TranslationTable<int, std::string>) (std::basic_istream<char, std::char_traits<char> >&)'

#ifndef TRANSLATOR_H_
#define TRANSLATOR_H_
#include "TranslationTable.h"
#include <iostream>
#include <cstdlib>
#include <fstream>

template<typename Key, typename Value>
class Translator
{
    private:
        TranslationTable<std::string,int> Table1;
        TranslationTable<int,std::string> Table2;
        Key getKey();
        Value getValue();

    public:
        Translator();
        Translator(Key key,Value value);
        Translator(std::istream& file);
};

template<typename Key, typename Value>
Translator<Key,Value>::Translator()
{
    return;
}

template<typename Key, typename Value>
Translator<Key,Value>::Translator(std::istream& file)
{
    Table1(file); // gives me error here
    Table1.fillTable(file);
    Table2(file); // same error here
    Table2.fillTable(file);

}


#endif /* TRANSLATOR_H_ */

これはエラーのある 2 番目のクラスであり、配列をループするエラーが発生します。

no match for 'operator*' in '**(((TranslationTable<int, std::string>*)this)->TranslationTable<int, std::string>::kP + (+(((unsigned int)i) * 8u)))'



#ifndef TRANSLATIONTABLE_H_
#define TRANSLATIONTABLE_H_
#include "KeyValuePair.h"
#include <iostream>
#include <cstdlib>

template<typename Key, typename Value>
class TranslationTable
{
    private:
        int numPairs;
        KeyValuePair<Key,Value> *kP;

    public:
        TranslationTable();
        TranslationTable(std::istream& is);
        void fillTable(std::istream& is);
        Value getValue(Key myKey) const;
};

template<typename Key, typename Value>
TranslationTable<Key,Value>::TranslationTable()
{
    return;
}

template<typename Key, typename Value>
TranslationTable<Key,Value>::TranslationTable(std::istream& is)
{
    numPairs = 0;
    is >> numPairs;
    kP = new KeyValuePair<Key,Value>[numPairs];
}

template<typename Key, typename Value>
void TranslationTable<Key,Value>::fillTable(std::istream& is)
{
    for(int i = 0; i < numPairs; i++)
    {
        is >> *kP[i]; // error here
    }
}

template<typename Key, typename Value>
Value TranslationTable<Key,Value>::getValue(Key myKey) const
{


}

#endif /* TRANSLATIONTABLE_H_ */
4

1 に答える 1

0

Translator T1(file);の代わりに入力したいと思いますT1(file)、および同様にT2

*そして、 inは必要ありません*kP[i]。すでに i 番目の要素を参照しています。

その後operator>>、クラスが動作KeyValuePairするように を定義する必要がありますis >> kP[i];

istream& operator >>(istream &is,KeyValuePair &obj)
{
        ...
      return is;
}
于 2013-02-06T01:45:49.890 に答える