Hola,
bueno eso de invertir cadenas.
yo tb estoy trabajando con cadenas... tengo un problema al trabajar con cadenas apuntadas por punteros. He sobrecargado el operador igual para tener cuidado cuando haga delete a una cadena.
Leí lo sgte en un documento:
"
C2 = C1;
Lo que realmente copiamos no es la cadena, sino el puntero. Ahora los dos punteros de las cadenas C1 y C2 están apuntando a la misma dirección. ¿Qué pasará cuando destruyamos los objetos?. Al destruir C1 se intentará liberar la memoria de su puntero cadena, y al destruir C2 también, pero ambos punteros apuntan a la misma dirección y el valor original del puntero de C2 se ha perdido, por lo que su memoria no puede ser liberada.
"
me aparece el mensaje de
Línea 21
prototype for `Cadena& Cadena::operator=(const Cadena&)' does not match any in class `Cadena'
Línea 10
Cadena Cadena::operator=(const Cadena&)
Línea 21
`Cadena& Cadena::operator=(const Cadena&)' and `Cadena Cadena::operator=(const Cadena&)' cannot be overloaded
los siguiente es mi codigo:
#include <iostream>
using namespace std;
class Cadena { // línea 4
public:
Cadena(char *cad);
Cadena() : cadena(NULL) {};
~Cadena() { delete[] cadena; };
void Mostrar() const;
Cadena operator=(const Cadena &c); //línea 10
private:
char *cadena;
};
Cadena::Cadena(char *cad) {
cadena = new char[strlen(cad)+1];
strcpy(cadena, cad);
}
Cadena &Cadena::operator=(const Cadena &c) { //línea 20
if (this != &c) {
delete[] cadena;
if (c.cadena) {
cadena = new char[strlen(c.cadena)+1];
strcpy(cadena, c.cadena);
}
else cadena = NULL;
}
return *this;
}
void Cadena::Mostrar() const {
cout << cadena << endl;
}
int main() {
Cadena C1("Cadena de prueba"), C2;
C1.Mostrar();
C2 = C1;
C2.Mostrar();
cin.get();
return 0;
}
ahora si borro la línea 10, entendiendo que sólo estoy sobrecargando, me aprece este otro mensaje
Línea 20
prototype for `Cadena Cadena::operator=(const Cadena&)' does not match any in class `Cadena'
Línea 4
than previous declaration `Cadena& Cadena::operator=(const Cadena&) throw ()'
Línea 20
`Cadena Cadena::operator=(const Cadena&)' and `Cadena& Cadena::operator=(const Cadena&)' cannot be overloaded
no entiendo por qué no puedo sobrecargar si el manual me recomienda eso y sus razones son válidas.
saludos