使用重载的istream运算符中缀到postfix

时间:2014-03-23 02:16:02

标签: templates operator-overloading postfix-notation infix-notation

我的老师给了我的课程一个程序,将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,这样它就会同时返回中缀和后缀表达式。我正在寻找代码正确性作为反馈。如果您有任何帮助,请提前感谢您。

1 个答案:

答案 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;

似乎是一个递归定义。这肯定看起来不正确。