2012-04-13 4 views
2

я должен написать эти два метода, чтобы распечатать, что содержится в:Переопределение оператора <<, используя два метода

бывший массив, состоящий tokenType тк (извините, пытаясь сэкономить пространство и избежать размещения целого Структуры)

к сожалению, я получаю ошибку компиляции, которая говорит: ошибка: не подходит для âoperator [] â в AEX [я] â

Как я могу это исправить, так что перекроет < <, так что второй метод использует первый?

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

Вы можете перегрузить '' << оператора. http://msdn.microsoft.com/en-us/library/1z2f6c2k(v=vs.80).aspx – prelic

+0

Я думаю, что ваш номер вашего компилятора с нуля, поэтому вы отключены на единицу: ошибка на линии одна выше от вашего комментария «проблема здесь». Определяет ли 'выражение'' '[]' оператор? Не могли бы вы показать реализацию? – dasblinkenlight

+0

Несомненно, я отредактирую его выше. – rfmas3

ответ

3

Вы очень близки - Вы забыли ссылаться на tokens массив, и попытался индексировать само выражение. Естественно, компилятор жаловался, потому что у вас нет загруженного [].

Это должно работать:

for (int i = 0; i < ex.numTokens; i++) 
{ 
    tk = ex.tokens[i]; // <<==== Here is the fix 
    os << tk.operand << " "; 
} 
+0

О, хорошо, спасибо! Это исправить! – rfmas3

1

Ответ после получения дополнительной информации

Вы должны фактически хранить от ex.tokens тогда как существует несоответствие типов. Вам нужно сделать следующее

tk = ex.tokens[i];

оригинальный ответ

Это не похоже, не проблема с operator<<. Скорее, похоже, что ваш тип expression не определяет operator[].

Чтобы узнать, как перегружать operator[] взять на вид на Overloading subscripting

+0

Я вижу ... Мне не разрешено редактировать файл, содержащий структурное выражение для этого проекта, но – rfmas3