Pregunta

Editar: expresión pasada Exp y String Expression por referencia constante

Estoy tratando de permitir que una clase se muestre a través de Cout de la siguiente manera:

#include <iostream>

class Expression {
private:
    std::string expression;
public:
    Expression(const std::string& expression):
        expression(expression) { }
    friend std::ostream& operator <<(ostream& os, const Expression& exp) {
        return os << exp.expression; }
};

Sin embargo, al compilar obtengo los errores:

main.cpp(9) : error C2061: syntax error : identifier 'ostream'
main.cpp(9) : error C2809: 'operator <<' has no formal parameters

Esto es especialmente confuso porque VC ++ me está dando ostream Como sugerencia de autocompleto cuando entro std::. ¿Qué está causando estos errores y cómo se pueden resolver?

¿Fue útil?

Solución

Seguramente necesitas std::ostream en todos los lugares? es decir:

friend std::ostream& operator <<(std::ostream& os, Expression& exp) ...
                                 ^^^

Otros consejos

Sin un using namespace std; cláusula (que tiene su propio conjunto de problemas), debe calificar completamente todos la iostream cosas.

Puede ver esto con el siguiente programa:

#include <iostream>

class Expression {
private:
    std::string expression;
public:
    Expression(std::string expression):
        expression(expression) { }
    //                                  added this bit.
    //                                _/_
    //                               /   \
    friend std::ostream& operator <<(std::ostream& os, Expression& exp) {
        return os << exp.expression; }
};

int main (void) {
    Expression e ("Hi, I'm Pax.");
    std::cout << e << std::endl;
    return 0;
}

que imprime:

Hi, I'm Pax.

como se esperaba.


Y, como han señalado algunos comentarios, debe pasar la cadena como const-referencia:

#include <iostream>

class Expression {
private:
    std::string expression;
public:
    Expression(const std::string& expression)
    : expression(expression) {
    }
    friend std::ostream& operator <<(std::ostream& os, const Expression& exp) {
        return os << exp.expression;
    }
};

int main (void) {
    Expression e ("Hi, I'm Pax.");
    std::cout << e << std::endl;
    return 0;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top