我必须编写这两种方法,以打印出其中包含的内容:
ex是一个由tokenType tk组成的数组(抱歉,试图节省空间并避免发布整个结构)
不幸的是,我收到一个编译错误,上面写着:错误:â] [i]中没有匹配âoperator[]â
如何解决这个问题,以便覆盖<<,以便第二种方法使用第一种方法?
ostream & operator<< ( ostream & os , const tokenType & tk)
{
switch (tk.category)
{
case TKN_OPRAND:
os << tk.operand;
break;
case TKN_OPRTOR:
os << tk.symbol;
break;
}
return os;
}
ostream & operator<< ( ostream & os , const expression & ex)
{
tokenType tk;
for (int i = 0; i < ex.numTokens; i++)
{
tk = ex[i];
os << tk.operand << " "; //problem line is this one
}
return os;
}
struct expression
{
int numTokens ;
tokenType tokens[MAX_TOKENS_IN_EXPRESSION] ;
void print() const ;
int toPostfix( expression & pfx ) const ;
int evalPostfix( int & val ) ;
expression() { numTokens = 0 ; } ; // default constructor
} ;
答案 0 :(得分:3)
你非常接近 - 你忘了引用tokens
数组,并尝试索引表达式本身。当然,编译器抱怨,因为你没有[]
重载。
这应该有效:
for (int i = 0; i < ex.numTokens; i++)
{
tk = ex.tokens[i]; // <<==== Here is the fix
os << tk.operand << " ";
}
答案 1 :(得分:1)
在追加详情后回答
你需要从ex.tokens实际存储,因为存在类型不匹配。您需要执行以下操作
tk = ex.tokens[i];
原始答案
这似乎不是operator<<
的问题。相反,您的类型expression
似乎没有定义operator[]
。
要了解如何重载operator[]
,请查看Overloading subscripting