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&lt;int&gt; </i><span class="Apple-style-span" style="font-weight: normal;">se transforma en </span><i>vector&lt;int&gt; </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">&lt;<a href="mailto:javiervazper@yahoo.es">javiervazper@yahoo.es</a>&gt;</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 &quot;resize&quot;, antes de empezar a asignar valores:<br>
<br>       laserData-&gt;distanceData.resize(sizeof(int)*NUM_LASER);<br><br>      laserData-&gt;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 &lt;<a href="mailto:javiervazper@yahoo.es" target="_blank">javiervazper@yahoo.es</a>&gt;<br><b><span style="font-weight:bold">Para:</span></b> jde-developers &lt;<a href="mailto:Jde-developers@gsyc.es" target="_blank">Jde-developers@gsyc.es</a>&gt;<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 &quot; sequence&lt;int&gt; IntSeq;&quot; para el tipo del atributo que devuelve un array (por ejemplo, la imagen. Redefiní mi atributo distanceData de esta forma, esto es: &quot; IntSeq distanceData;&quot; 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 &quot;Segmentation Fault&quot; 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(&amp;(laserData-&gt;distanceData),a,sizeof(a));<br>                printf(&quot;data 0: %d\ndata 1: %d\n%d\n%d\n&quot;,laserData-&gt;distanceData[0],a[1],sizeof(a),sizeof(&amp;(laserData-&gt;distanceData))); <br>
...<br><br>¿Alguien tiene alguna idea? <br><br>Veo que David usa una clase &quot;pipeline&quot; 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>