Hola,<div><br></div><div>En C++ <span class="Apple-style-span" style="font-family: arial, helvetica, sans-serif; font-size: 13px; border-collapse: collapse; "><b><i>s</i></b><b><i>equence<int> </i><span class="Apple-style-span" style="font-weight: normal;">se transforma en </span><i>vector<int> </i><span class="Apple-style-span" style="font-weight: normal;">por lo que debemos seguir las reglas de uso de los vectores stl de c++, es decir, o bien añadimos elementos con push_back o bien ajustamos el tamaño con resize (tras la inicialización están vacíos).</span></b></span></div>
<div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">Para la asignación de posiciones consecutivas la STL no tiene ningún mecanismo, pero dado que la representación en memoria es idéntica a los arrays de C, podemos usar el memmove (memcpy) para copiar valores. Siempre teniendo cuidado de asignar los mismos tipos de datos o compatibles. De ahí el memmove/memcpy que veías en mi código, que no es mas que una copia rápida de datos en el vector (en vez de iterar sobre sus elementos).</span></font></div>
<div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">Espero haber aclarado la duda,</span></font></div>
<div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;">David.</span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br>
</span></font></div><div><font class="Apple-style-span" face="arial, helvetica, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div><span class="Apple-style-span" style="font-size: 13px; "><b><span class="Apple-style-span" style="font-weight: normal;"></span></b></span><br>
<div class="gmail_quote">2010/5/2 Javier Vazquez <span dir="ltr"><<a href="mailto:javiervazper@yahoo.es">javiervazper@yahoo.es</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div><div style="font-family:arial,helvetica,sans-serif;font-size:10pt"><div>Hola de nuevo.<br><br>Pues justo ahora lo saco. Dejando el atributuencia de enteros, faltaba llamar al método "resize", antes de empezar a asignar valores:<br>
<br> laserData->distanceData.resize(sizeof(int)*NUM_LASER);<br><br> laserData->distanceData[0]=0;<br>....<br><br>Así ya funciona!!<br><br>Un saludo,<br><font color="#888888">Javier.<br></font><div class="hm">
<br><br></div></div><div style="font-family:arial,helvetica,sans-serif;font-size:10pt"><div class="hm"><br></div><div style="font-family:times new roman,new york,times,serif;font-size:12pt"><div class="hm"><font face="Tahoma" size="2"><hr size="1">
<b><span style="font-weight:bold">De:</span></b> Javier Vazquez <<a href="mailto:javiervazper@yahoo.es" target="_blank">javiervazper@yahoo.es</a>><br><b><span style="font-weight:bold">Para:</span></b> jde-developers <<a href="mailto:Jde-developers@gsyc.es" target="_blank">Jde-developers@gsyc.es</a>><br>
<b><span style="font-weight:bold">Enviado:</span></b> dom,2 mayo, 2010 00:50<br><b><span style="font-weight:bold">Asunto:</span></b> uso de arrays en interfaces ICE<br></font></div><div><div></div><div class="h5"><br><div style="font-family:arial,helvetica,sans-serif;font-size:10pt;color:rgb(0, 0, 0)">
<div>Hola,<br><br>tengo una duda con la que me he atascado desde hace varios días y no se cómo continuar. Necesito definir una interfaz con una operación de devuelva un array de un número de posiciones constantes.<br><br>
Inicialmente pensé en declarar una clase, con un atributo aaray para que la operación devuelva dicho objeto. La declaración siguiente, parece no estar soportada por el traductor de ICE:<br><br><div style="margin-left:40px">
module jderobot{ <br><br> /* laser information */<br> class LaserData<br> {<br> int distanceData[10];<br> };<br><br><br> /** <br> * Interface to the Gazebo laser
sensor.<br> */<br> interface Laser<br> {<br>
idempotent LaserData getLaserData();<br> };<br><br>}; //module<br></div><br>A continuación, fijándome en código hecho de JDE5.0, he visto que se utiliza " sequence<int> IntSeq;" para el tipo del atributo que devuelve un array (por ejemplo, la imagen. Redefiní mi atributo distanceData de esta forma, esto es: " IntSeq distanceData;" y obtengo el código cpp.<br>
<br>Sin embargo, ahora no soy capaz de usarlo. He probado a asignar valores de varias formas pero siempre me da un "Segmentation Fault" en tiempo de ejecución (por que compilar, compila bien). Este es uno de los muchas pruebas básicas que he realizado pero nada:<br>
<br>....<br> int a[2];<br> a[0]=0;<br> a[1]=1;<br><br>
memcpy(&(laserData->distanceData),a,sizeof(a));<br> printf("data 0: %d\ndata 1: %d\n%d\n%d\n",laserData->distanceData[0],a[1],sizeof(a),sizeof(&(laserData->distanceData))); <br>
...<br><br>¿Alguien tiene alguna idea? <br><br>Veo que David usa una clase "pipeline" para instanciar un buffer y luego lo copia con memcpy. No obstante, yo siempre quiero trabajar con un array de 180 posiciones.<br>
<br>Gracias de antemano,<br>Javier.<br></div>
</div><br>
</div></div></div></div></div><br>
</div><br>_______________________________________________<br>
Jde-developers mailing list<br>
<a href="mailto:Jde-developers@gsyc.es">Jde-developers@gsyc.es</a><br>
<a href="http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers" target="_blank">http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers</a><br>
<br></blockquote></div><br></div>