 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
-Spencer- Capt

Registrado: 03 Mar 2003Mensajes: 160Ubicación: Armenia - Colombia
|
Publicado: Dom 01 Ago, 2004 8:07 am Asunto: como hago este cast |
|
|
Hola
adaptando un codigo para realizar un cast, me aparece el siguiente error en este codigo
void __fastcall TForm2::escritura_datos(double pesos[], double valor[], double umbral_act[])
{
Table3->First();
Table3->Edit();
//~~~~~~~~~~~~escritura~para~el~peso~de~las~neuronas~de~proceso~~~~~~~~~~~~~~~//
Application->ProcessMessages();
std::auto_ptr< Classes::TMemoryStream >
stream_peso_neuronas_proc(new Classes::TMemoryStream);
stream_peso_neuronas_proc.get()->Position = 0;
std::vector<bool> tmp;
double *pesos_end = pesos+1048576;
std::transform
(
pesos, // Desde el inicio del 'vector'
pesos_end, // Hasta el final del 'vector'
std::back_inserter(tmp), // Salida
double_a_bool // Función de conversión
);
Application->ProcessMessages();
stream_peso_neuronas_proc.get()->Write(tmp, (1048576 * sizeof(bool)) ); /*aqui, en esta linea*/
stream_peso_neuronas_proc.get()->Position = 0;
Application->ProcessMessages();
Table3Peso_neurona_proc->LoadFromStream(stream_peso_neuronas_proc.get());
...
en la linea indicada arriba en el codigo me aparece un error que dice
E2034 Cannot convert 'vector<allocator<bool> >' to 'const void *'
me imagino que debo hacer un cast, pero no se de que tipo.
Agradezco cualquier sugerencia.
Gracias y disculpen las molestias _________________ "Cállate, o di algo mejor que el silencio" |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Dom 01 Ago, 2004 9:06 am Asunto: |
|
|
La línea quedaría así:
stream_peso_neuronas_proc->Write(&tmp[0], (1048576 * sizeof(bool)) );
por cierto, no tienes necesidad de poner ".get()" cada vez, por ejemplo, esta línea:
stream_peso_neuronas_proc.get()->Position = 0;
la dejaríamos así:
stream_peso_neuronas_proc->Position = 0; |
|
| Volver arriba |
|
 |
-Spencer- Capt

Registrado: 03 Mar 2003Mensajes: 160Ubicación: Armenia - Colombia
|
Publicado: Lun 02 Ago, 2004 7:09 am Asunto: |
|
|
Hola _Leo
ya hice el cambio en la linea que me indicó, pero cuando ejecuto el codigo me marca error en la linea
stream_peso_neuronas_proc->Write(&tmp[0], (1048576 * sizeof(bool)) );
y no se por que.
El mensaje dice asi
EAccessViolation with message 'Access Violation at address 00604B2D in module final.exe'...
No se el por qué. Alguna sugerencia?
Gracias _________________ "Cállate, o di algo mejor que el silencio" |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 02 Ago, 2004 10:58 am Asunto: |
|
|
El error se debe a como se almacena internamente el vector bool, que en este ejemplo estamos presuponiendo que seria en 1 byte (o varios) al usar sizeof, pero el vector de tipo bool almacena cada valor en 1 bit ... no se si me entiendes ... de todos modos si no quieres cambiar mucho el ejemplo bastaría con cambiar todas las coincidencias de "bool" por "BYTE".
Y otra solución, mirando mejor el código que has puesto, podríamos quitar el vector bool y guardar la conversión directamente en el MemoryStream. La cosa quedaría más resumida y debería funcionar:
| Código: | ...
std::auto_ptr<TMemoryStream> stream_peso_neuronas_proc(new TMemoryStream);
double* pesos_end = pesos + 1048576;
stream_peso_neuronas_proc->Size = sizeof(bool) * 1048576;
// Aquí hacemos el cambio mas importante, al convertirlo
// almacenamos el valor directamente en el MemoryStream
std::transform(pesos, pesos_end,
static_cast<bool*>(stream_peso_neuronas_proc->Memory), double_a_bool);
... |
(en este caso nos sobran todos los "->Position", ya que al hacerlo así la posición esta en 0 siempre) |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|