Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eternal Idol

#1021
http://en.cppreference.com/w/cpp/language/initializer_list

El constructor copia es equivalente a:
Código (c++) [Seleccionar]
Handle::Handle(const Handle& other)
{
   smile  = new CheshireCat(*other.smile);
   // do nothing
}


http://en.wikipedia.org/wiki/Copy_constructor

Si, pero ese constructor copia implicito como explica en el enlace de arriba tendria el problema del shallow copy, por eso esta implementado.

Por ejemplo, esto explotaria al llegar al destructor de Handle con el objeto x donde intentaria liberar smile (que apuntaria a la memoria ya liberada al llamar al operador delete con el objeto p).
Código (c++) [Seleccionar]
Handle *p = new Handle;
Handle x = *p;
delete p;


De nadas  ::)
#1023
Lo que pasa es que en un momento erase retorna un interator apuntando al fin del contenedor y cuando haces el incremento del bucle el iterator se va al diablo. Otra manera de hacerlo siguiendo el ejemplo anterior:

Código (c++) [Seleccionar]
for (vector<int>::iterator it = v.begin(); it != v.end(); ++it)
{
 if (*it % 2 == 0)
   it = v.erase(it);
 if (it == v.end())
  break;
}
#1024
Cita de: Orubatosu en  3 Diciembre 2014, 20:25 PM
Técnicamente si... pero si pongo el it=v.erase(it); también me explota.

Estoy por probar (ahora no, que voy a cenar) el no utilizar un bucle for, sino un while e incrementar SOLO si no se borra, a ver que pasa.

Si, como te decia antes es la manera de hacerlo, asignar e incrementar cuando no hayas borrado.

Ejemplo sencillo:
Código (c++) [Seleccionar]
for (vector<int>::iterator it = v.begin(); it != v.end(); )
{
 if (*it % 2 == 0)
   it = v.erase(it);
  else
    ++it;
}
#1025
Me parece que no hay ninguna garantia de que it continue siendo valido despues de llamar a erase, mientras que si le asignas el valor de retorno de erase si lo sera, como ya viste la condicion de incremento del for no es conveniente, lo mas sencillo es incrementar solo cuando no borres dentro del bucle.
#1026
Ya lo viste:
it = v.erase(it);
#1027
Cita de: francoyo1998 en  3 Diciembre 2014, 04:18 AM
1) Dije que no sabia C++ y por eso pedi codigo de ejemplo y explicacion (practicamente estoy copiando y pegando codigo)

2) No se ingles

1) No me importa, es tu problema, aprende y usa un buscador de Internet.

2) Idem.
#1028
Podes acceder (indirectamente) argc y argv y trabajar como todo programa de C/C++.

Member Data Documentation
int wxAppConsole::argc

Number of command line arguments (after environment-specific processing).
wxChar** wxAppConsole::argv

Command line arguments (after environment-specific processing).

Under Windows and Linux/Unix, you should parse the command line arguments and check for files to be opened when starting your application. Under OS X, you need to override MacOpenFiles() since command line arguments are used differently there.

You may use the wxCmdLineParser to parse command line arguments.

http://docs.wxwidgets.org/trunk/classwx_app_console.html#a18d2288273cee260ff047831a5e8bfc5
#1029
Código (c++) [Seleccionar]
Miclase ass[21];

El ejecutable tiene una definicion diferente de Miclase (sin miembros) que la de la DLL - algo que no se podia asumir del codigo que dejaste anteriormente - y al instanciar los objetos usa un tamaño erroneo, teniendo el string definido como en la DLL funciona correctamente.




Si queres seguir ocultando la implementacion te recomiendo leer este articulo e implementar la interfaz abstracta:
HowTo: Export C++ classes from a DLL.

Otra opcion:
http://en.wikipedia.org/wiki/Opaque_pointer#C.2B.2B
#1030
Cita de: kafok en  2 Diciembre 2014, 14:23 PMUso CodeBlocks. El PDB es eso de las simbolos de mi programa? Yo para generar los simbolos uso en la configuracion del copilador la bandera -g. Aun asi estudiare como hacer eso.

Yo trabajo solo con las herramientas de Microsoft pero buscando en Google encontre este metodo (no hagas el paso del strip):

http://blog.morlad.at/blah/mingw_postmortem

Cita de: kafok en  2 Diciembre 2014, 14:23 PMLo preguntaba porque puedo dejar enlaces a mega o a dropbox, pero en un muchos foros no puede hacerse eso, por temas de seguridad. Solo queria asegurarme de como lo puedo hacer

Entonces, ¿Dejo un link en este post cuando lo tenga todo no?¿O sino, como lo hago?

Las reglas prohiben publicar enlaces a programas compilados, no hace falta en este caso, solo se necesita un dump y los simbolos de depuracion (archivo .PDB) para empezar.