C/Visual C - se puede usar un puntero a char en esta funcion?

 
Vista:

se puede usar un puntero a char en esta funcion?

Publicado por jose morales (16 intervenciones) el 07/08/2005 20:41:27
Hola lo unico que quiero saber es si se puede utilizar un puntero con la funcion sttrev(), que invierte una cadena, ya que cuando utilizo un punteroa char me marca error, alguien sabe porque?

#include <iostream.h>
#include <string.h>

int main(){

char *cadena1="Nada nuevo que escribir";
strrev(cadena1); cout<<cadena1<<endl;

return 0;
}

Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:se puede usar un puntero a char en esta funcion

Publicado por fernando.gomez (1603 intervenciones) el 08/08/2005 04:17:03
Bueno, te marca error porque cadena1 apunta a una dirección estática. Tendrías que hacer algo como:

char cadena1[] = "Nada nuevo que escribir";
strrev(cadena1);

o bien:

char* cadena1 = new char(24);
strrev(cadena1);
cout<<cadena1<<endl;
delete [] cadena1;

Salutes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

invertir cadenas

Publicado por Franco Cedillo (36 intervenciones) el 09/08/2005 01:35:36
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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: solucioné mi problema

Publicado por Franco Cedillo (36 intervenciones) el 09/08/2005 02:03:02
Hola,

Consulté sobre el operador = (para clases) y encontré que sólo puedo sobrecargarlo dentro de la clase.

- Modifico la clase agragando el operador sobrecargado (ya está definido implícitamente)
- Elimino la definición externa del operador.

class Cadena {
public:
Cadena(char *cad);
Cadena() : cadena(NULL) {};
~Cadena() { delete[] cadena; };
void Mostrar() const;
Cadena &Cadena::operator=(const Cadena &c) {
if (this != &c) {
delete[] cadena;
if (c.cadena) {
cadena = new char[strlen(c.cadena)+1];
strcpy(cadena, c.cadena);
}
else cadena = NULL;
}
return *this;
};
private:
char *cadena;
};

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar