我的老师给了我的课程一个程序,将A + B * C这样的中缀表达式转换为后缀。我已完成其他代码片段,但重载的istream运算符给了我一些问题。这是我得到的错误:
错误:没有参数转换为“转换后补丁”。这取决于模板参数,因此声明了< convertToPostfix'必须可用[-fpermissive] |
这里是istream运算符的代码:
template <class U>
std::istream& operator>>(std::istream& in, expression<U>& e) {
char c;
e.ifix ="";
e.pfix ="";
do {
in >> e;
e.pfix += c;
}while(c!='.' || c!=';');
convertToPostfix();
return in;
}
我的老师告诉我们在return语句之前放置convertToPostfix,这样它就会同时返回中缀和后缀表达式。我正在寻找代码正确性作为反馈。如果您有任何帮助,请提前感谢您。
答案 0 :(得分:0)
主要错误如下所示:
There are no arguments that depend on a template parameter
但另外你忘了分配给c
;
// Declared
char c;
// Used here
e.pfix += c; // What is the value of `c` here?
// and here
while(c!='.' || c!=';'); // What is the value of `c` here?
// If you don't explicitly assign it a value
// contains a random value.
我怀疑你想要从输入c
中读取下一个无空格字符。
这一行:
in >> e;
似乎是一个递归定义。这肯定看起来不正确。