-1

我的程序有问题。我正在使用 Eclipse,但我无法弄清楚这些错误的含义。我一直在寻找一段时间,找不到我的错误。我在构建文件时附加了两个显示错误的类和问题列表(我在 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_ */

这是第二个有错误的类,它给我一个错误将循环遍历数组:

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);而不是 just 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 回答