我的程序出了问题。我正在使用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_ */
答案 0 :(得分:0)
我认为您要输入Translator T1(file);
而不只是T1(file)
,类似于T2
您不需要*
中的*kP[i]
。它已经引用了第i个元素。
之后,您需要为课程operator>>
定义KeyValuePair
才能让is >> kP[i];
生效。
istream& operator >>(istream &is,KeyValuePair &obj)
{
...
return is;
}