无法弄清楚Eclipse中的错误

时间:2013-02-06 01:39:37

标签: c++

我的程序出了问题。我正在使用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_ */

1 个答案:

答案 0 :(得分:0)

我认为您要输入Translator T1(file);而不只是T1(file),类似于T2

您不需要*中的*kP[i]。它已经引用了第i个元素。

之后,您需要为课程operator>>定义KeyValuePair才能让is >> kP[i];生效。

istream& operator >>(istream &is,KeyValuePair &obj)
{
        ...
      return is;
}