Pregunta

Tengo una clase simple paquete que está sobrecargado de modo que pueda paquete de datos de salida, simplemente con tribunal << nombrepaquete. También tengo dos tipos de datos, nombre que es una cadena y el coste de envío con un doble.

protected:
    string name;
    string address;
    double weight;
    double shippingcost;

ostream &operator<<( ostream &output, const Package &package )
{
    output << "Package Information ---------------";
    output << "Recipient: " << package.name << endl;
    output << "Shipping Cost (including any applicable fees): " << package.shippingcost;

El problema se produce con la cuarta línea (salida << "Beneficiario: ...) Estoy recibiendo el error. 'Ningún operador '<<' coincide con estos operandos' Sin embargo, la línea 5 está bien

supongo que esto tiene que ver con el tipo de datos es una cadena para el nombre del paquete. Algunas ideas?

¿Fue útil?

Solución

Usted debe ser incluida una cabecera de secuencia equivocada. <string.h> y <string> dos cabeceras estándar completamente diferentes.

#include <string.h> //or in C++ <cstring>

Eso es para las funciones de arrays de char terminadas en cero, al estilo de C (como strcpy, strcmp etc). referencia cstring

#include <string>

Esto es para std::string. cadena de referencia

Otros consejos

Es probable echa en falta #include <string>.

Trate de declarar operator<< como un friend en su declaración de la clase:

struct Package
{
public:
    // Declare {external} function "operator<<" as a friend
    // to give it access to the members.
    friend std::ostream& operator<<(std::ostream&, const Package& p);

protected:
    string name;
    string address;
    double weight;
    double shippingcost;
};

std::ostream&
operator<<(std::ostream& output, const Package& package)
{
    output << "Package Information ---------------";
    output << "Recipient: " << package.name << endl;
    output << "Shipping Cost (including any applicable fees): " << package.shippingcost;
    return output;
}

Por cierto, es muy mala forma de utilizar los nombres de variables que tienen el mismo nombre que el tipo de datos diferente, con excepción de caso. Esto causa estragos con la búsqueda y herramientas de análisis. Además, los errores tipográficos pueden tener un poco de diversión efectos secundarios también.

Utilice esta opción para emitir la cadena ..

salida << "Beneficiario:" << package.name.c_str () << endl;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top