Foros del Web » Programación para mayores de 30 ;) » Programación General »

Ayuda con sobrecarga de operadores en C++

Estas en el tema de Ayuda con sobrecarga de operadores en C++ en el foro de Programación General en Foros del Web. Tengo que hacer una clase que permite concatenar cadenas, luego de leer durante horas un libro de c++ me las arregle para hacer esto, compila ...
  #1 (permalink)  
Antiguo 22/08/2005, 17:20
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
Ayuda con sobrecarga de operadores en C++

Tengo que hacer una clase que permite concatenar cadenas, luego de leer durante horas un libro de c++ me las arregle para hacer esto, compila perfecto en DEV C++ sin embargo cuando lo ejecuto me tira error y se me cierra, incluso hice copy & paste del programa del libro y tambien da error, aqui dejo lo que hice yo, es simple:

Código:
#ifndef STRING_H
#define STRING_H
#include <iostream>

using namespace std;

class Str
{
	char string[100];

	public:
	    Str(char s[] = "\0")
	    {
	        strcpy(string, s);
	    }
 	    ~Str() { };
	    Str operator +(Str);
	    Str operator =(Str);
	    void view();
};    
#endif
string.cpp
Código:
#include "string.h"
#include <iostream>
Str Str::operator +(Str s)
{
    Str tmp;
	strcpy(tmp.string, string);
	strcat(tmp.string, s.string);
	return tmp;
}
Str Str::operator =(Str s)
{
    strcpy(string, s.string);
    return *this;
}
void Str::view()
{
    cout << string;
}
main.cpp
Código:
#include "string.h"
#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
  Str str1("Hola "), str2("Mundo"), str3;
  str3 = str1 + str2;
  str3.view();
  system("PAUSE");	
  return 0;
}
que esta mal???
  #2 (permalink)  
Antiguo 22/08/2005, 21:52
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
podrias usar el depurador para checar exactamente en que parte da el error y asi podras ver en donde esta mal.

Saludos
  #3 (permalink)  
Antiguo 23/08/2005, 08:31
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Si, secundo el consejo de Instru porque a mi no me da ningun error (con VC++).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #4 (permalink)  
Antiguo 23/08/2005, 10:18
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
entonces si te corrio es el compilador apestoso del devc++ -_-

el depurador no termino de entender como funciona
  #5 (permalink)  
Antiguo 23/08/2005, 10:24
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
¿Te da una excepcion? ¿Lo estas ejecutando desde linea de comandos?

Si queres podes enviarnos el ejecutable para que lo depuremos
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #6 (permalink)  
Antiguo 23/08/2005, 11:05
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
lol, no hice nada y ahora funciona.. los misterios de la vida
  #7 (permalink)  
Antiguo 23/08/2005, 11:29
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Probablemente no habias recompilado y estabas probando una version incompleta.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #8 (permalink)  
Antiguo 23/08/2005, 14:43
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por SiR.CARAJ0DIDA
entonces si te corrio es el compilador apestoso del devc++ -_-

el depurador no termino de entender como funciona
El DevC++ no es ningún compilador horrendo, primero porque no es un compilador, sino un IDE para programar.

Y segundo, que DevC++ viene con el compilador GCC portado a Windows. Y GCC no es ninguna bobada... Se compilan sistemas operativos con él... :) Que no les sepas manejar, no es problema de DevC++/GCC
  #9 (permalink)  
Antiguo 23/08/2005, 15:04
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
mm ok, ahora tengo otro problemita ;D

me pidieron sobrecargar el operador insertor >> y no tengo idea, alguien sabe?
  #10 (permalink)  
Antiguo 23/08/2005, 15:08
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Cita:
Iniciado por MaxExtreme
El DevC++ no es ningún compilador horrendo, primero porque no es un compilador, sino un IDE para programar.

Y segundo, que DevC++ viene con el compilador GCC portado a Windows. Y GCC no es ninguna bobada... Se compilan sistemas operativos con él... :) Que no les sepas manejar, no es problema de DevC++/GCC
Totalmente de acuerdo... ademas el depurador es facil de usar...

Entras al menu Herramientas -> Opciones de compilador -> Generacion/Optimizacion de codigo -> Enlazador(linker) -> Generar informacion de depuracion = Yes

De ahi te vas a la pestaña llamada "Depuracion" (que esta en la parte de abajo) y le das en "Depurar" o "Ejecutar hasta el cursor"...

Siguiendo con la costumbre, deberias de investigar un poco mas, date una vuelta por google y busca informacion para el depurador que incluye dev-c++, es muy facil de usar y cuando sepas usarlo sera mas facil que resulvas tus errores.
  #11 (permalink)  
Antiguo 23/08/2005, 15:11
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
http://programarenc.webcindario.com/Cplus/capitulo6.htm

Encontrado como primer resultado de la busqueda en google: "Sobrecarga <<"

Ve la parte final...
  #12 (permalink)  
Antiguo 23/08/2005, 15:57
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
bueno, la hic tal cual dice ahi y me sigue tirando errores... me esta cansando ya esto, hago todo bien y me tira error
Código:
istream& operator >> (istream &f, const Str &obj)
{
	f >> obj.string;
	return f;
}
  #13 (permalink)  
Antiguo 23/08/2005, 16:48
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por scrolling
Totalmente de acuerdo... ademas el depurador es facil de usar...

Entras al menu Herramientas -> Opciones de compilador -> Generacion/Optimizacion de codigo -> Enlazador(linker) -> Generar informacion de depuracion = Yes

De ahi te vas a la pestaña llamada "Depuracion" (que esta en la parte de abajo) y le das en "Depurar" o "Ejecutar hasta el cursor"...

Siguiendo con la costumbre, deberias de investigar un poco mas, date una vuelta por google y busca informacion para el depurador que incluye dev-c++, es muy facil de usar y cuando sepas usarlo sera mas facil que resulvas tus errores.

Así mismo, el compilador es GCC, el debugger es GDB, van a la par :)
  #14 (permalink)  
Antiguo 23/08/2005, 16:50
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por SiR.CARAJ0DIDA
bueno, la hic tal cual dice ahi y me sigue tirando errores... me esta cansando ya esto, hago todo bien y me tira error
Código:
istream& operator >> (istream &f, const Str &obj)
{
	f >> obj.string;
	return f;
}

Bueno, es lógico que te canse, pasar de MySQL, HTML, programación web a esto... ;)

Vamos a ver, tú pones "f >> obj.string"... ¿De dónde sacas eso?
  #15 (permalink)  
Antiguo 23/08/2005, 18:13
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
es la misma clase que use al principio del thread, aqui pongo todo completo de nuevo:

string.h
Código:
#ifndef STRING_H
#define STRING_H
#include <iostream>

using namespace std;

class Str
{
	char string[100];

	public:
	    Str(char *s = "\0")
	    {
	        strcpy(string, s);
	    }
 	    ~Str() { };
	    Str operator +(Str);	// concatena 2 objetos
	    Str operator +(char[]);	// concatena objeto con cadena
	    friend ostream& operator << (ostream&, const Str&);
	    friend istream& operator >> (istream&, const Str&);
	    Str operator =(Str);
	    Str operator =(char[]);
};    
#endif
string.cpp
Código:
#include "string.h"
#include <iostream>
Str Str::operator +(Str s)
{
    Str tmp;
	strcpy(tmp.string, string);
	strcat(tmp.string, s.string);
	return tmp;
}
Str Str::operator +(char s[])
{
	Str tmp;
	strcpy(tmp.string, string);
	strcat(tmp.string, s);
	return tmp;
}
Str Str::operator =(Str s)
{
    strcpy(string, s.string);
    return *this;
}
Str Str::operator =(char s[])
{
	strcpy(string, s);
	return *this;
}
ostream& operator << (ostream &f, const Str &obj)
{
	f << obj.string << endl;
	return f;
}
istream& operator >> (istream &f, const Str &obj)
{
	f >> obj.string;
	return f;
}
main.cpp
Código:
#include "string.h"
#include <iostream>
#include <stdlib.h>

using namespace std;

int main()
{
  Str str1("CaraJodida "), str2("es groso "), str3;
  str3 = str1 + str2;
  str3 = str3 + ";D ";
  cout << "Cadena concatenada: " << str3 << endl;
  str3 = "cadena asignada a objeto";
  cout << "Otra cadena: " << str3 << endl;
  //cout << "Ingrese cadena : ";
  //cin >> str3;
  cout << str3;
  system("PAUSE");	
  return 0;
}
El error que tira es:
34 G:\C++\Projects LP3\string\string.cpp ambiguous overload for 'operator>>' in 'f >> obj->Str::string'
  #16 (permalink)  
Antiguo 23/08/2005, 19:26
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Este si se ejecuta bien:

string.h
Código:
#ifndef STRING_H
#define STRING_H
#include <iostream>
 
using namespace std;
 
class Str
{
	char string[100];
 
	public:
	 Str(char *s = "\0")
	 {
	 strcpy(string, s);
	 }
	 ~Str() { };
	 Str operator +(Str);	// concatena 2 objetos
	 Str operator +(char[]);	// concatena objeto con cadena
	 friend ostream& operator << (ostream&, const Str&);
	 friend istream& operator >> (istream&, Str &obj);
	 Str operator =(Str);
	 Str operator =(char[]);
};
#endif
string.cpp
Código:
#include "string.h"
#include <iostream>
 
Str Str::operator +(Str s)
{
Str tmp;
	strcpy(tmp.string, string);
	strcat(tmp.string, s.string);
	return tmp;
}
Str Str::operator +(char s[])
{
	Str tmp;
	strcpy(tmp.string, string);
	strcat(tmp.string, s);
	return tmp;
}
Str Str::operator =(Str s)
{
strcpy(string, s.string);
return *this;
}
Str Str::operator =(char s[])
{
	strcpy(string, s);
	return *this;
}
 
ostream& operator << (ostream &f, const Str &obj)
{
	f << obj.string << endl;
	return f;
}
 
istream& operator >> (istream& f, Str &obj)
{
	f >> obj.string;
	return f;
}
main.cpp

Código:
#include "string.h"
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main()
{
Str str1("CaraJodida "), str2("es groso "), str3;
str3 = str1 + str2;
str3 = str3 + ";D ";
cout << "Cadena concatenada: " << str3 << endl;
str3 = "cadena asignada a objeto";
cout << "Otra cadena: " << str3 << endl;
//cout << "Ingrese cadena : ";
//cin >> str3;
cout << str3;
system("PAUSE");
return 0;
}
Este codigo, en Dev-C++ no me da errores... tampoco en Visual Studio...

Para que no tengas que copiar y pegar todo... el chiste es que tu tenias:

Código:
friend istream& operator >> (istream&, const Str &obj);
Como declaracion, y como definicion tenias:

Código:
istream& operator >> (istream& f, const Str &obj)
{
f >> obj.string;
return f;
}
La cadena que va a recibir este operador no puede ser constante, asi que solo quitate el const a const Str &obj y te va a funcionar

Última edición por scrolling; 23/08/2005 a las 19:35
  #17 (permalink)  
Antiguo 24/08/2005, 11:40
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
aaaa, eso de constante no me queda claro todavia :s nose cuando poner const y cuando no

y no entiendo este debug.. compilo, pongo debug y me dice que mi proyecto no tiene informacion de depuracion y me pregunta si lo quiero habilitar y reconstruir el proyecto, le pongo que si 50 veces y nada...

Última edición por SiR.CARAJ0DIDA; 24/08/2005 a las 11:48
  #18 (permalink)  
Antiguo 24/08/2005, 12:57
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Pues, en una de mis respuestas (la primera) te explico como habilitar la información para depuración. Pero cuando ya te quede el ejecutable sin errores, te recomiendo deshabilitarla y reconstruir el programa...
  #19 (permalink)  
Antiguo 24/08/2005, 13:00
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por SiR.CARAJ0DIDA
aaaa, eso de constante no me queda claro todavia :s nose cuando poner const y cuando no

y no entiendo este debug.. compilo, pongo debug y me dice que mi proyecto no tiene informacion de depuracion y me pregunta si lo quiero habilitar y reconstruir el proyecto, le pongo que si 50 veces y nada...
Puede que no funcione. Encontré un bug en una versión del Devcpp (después de meses de uso), en la que no me dejaba debuggear, simplemente recompilaba, iniciaba con debug y decía que no había información de depuración. La volvías a activar y así continuamente.

En Visual C++ 6 vi otro fallo que empezaba a compilar (programas consola) y se quedaba en medio sin hacer nada, sin dejar parar/cerrar/salir/etc del programa.
  #20 (permalink)  
Antiguo 24/08/2005, 13:09
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Pues yo llevo un tiempo usandolo y nunca me ha dado fallos (el de dev-c++), solo uno con variables vigiladas... pero normalmente funciona bien y facil (a mi)
  #21 (permalink)  
Antiguo 24/08/2005, 20:08
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por scrolling
Pues yo llevo un tiempo usandolo y nunca me ha dado fallos (el de dev-c++), solo uno con variables vigiladas... pero normalmente funciona bien y facil (a mi)
Ciertamente lo hace, tuve que reinstalarlo. No sé, pudo ser cualquier cosa. NO funcionaba la depuración con ningún proyecto.
  #22 (permalink)  
Antiguo 24/08/2005, 21:05
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Es que con eso de que estan en la beta de la version 5... Aun tiene errores, y parece que el proyecto esta detenido, y aunque es Open Source, esta en delphi... entonces ya te imaginaras la gran cantidad de ayuda...

Por el momento me he pasado a Visual Studio :(
  #23 (permalink)  
Antiguo 25/08/2005, 08:19
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por scrolling
Es que con eso de que estan en la beta de la version 5... Aun tiene errores, y parece que el proyecto esta detenido, y aunque es Open Source, esta en delphi... entonces ya te imaginaras la gran cantidad de ayuda...

Por el momento me he pasado a Visual Studio :(
Bueno, gcc y gdb son importantísimos, pero tener un IDE también lo es. Para debugger, el IDE de DevCpp reconozcámoslo, no sirve. Habría que hacerlo con gdb a mano...
  #24 (permalink)  
Antiguo 25/08/2005, 10:56
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
entonces hay algun otro compilador/IDE (no entiendo las diferencias) bueno que pueda utilizar??
  #25 (permalink)  
Antiguo 25/08/2005, 12:15
 
Fecha de Ingreso: junio-2005
Ubicación: México, México
Mensajes: 429
Antigüedad: 18 años, 10 meses
Puntos: 1
Pues yo te recomiendo Visual Studio...

Y pues sí, la interfaz de debugger de Dev-C++ aun tiene algunos problemillas, ojala y los resuelvan pronto porque la verdad Dev-C++ se me hace muy bueno (a excepcion de ese pequeño error :P)

IDE = La interfaz de usuario, osea, el editor de textos, En este caso es el Dev-C++
Compilador = El programa que es llamado desde el IDE cuando se pulsa el boton "Compilar"
  #26 (permalink)  
Antiguo 25/08/2005, 12:21
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Para depurar recomiendo WINDBG (+kd), SoftIce y OllyDbg

El ultimo va bastante bien pero solo funciona en user mode y en 32 bits, SoftIce solo lo pude hacer funciona en 32 bits y WINDBG es indestructible
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:55.