<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Vale perdón que igual no me he explicado suficiente.<div><br></div><div>A ver por ejemplo.</div><div>Quiero definir una clase, con sus parte publica y su parte privada por ejemplo y variables y procedimientos en ambas secciones.</div><div>Variables globales que se definirán en el programa principal y se usaran en los procedimientos.</div><div>Definirá las variables tipo clase en el programa principal y aparte de sus procedimientos propios de la clase serán parámetros para procedimientos/funciones del programa.</div><div>Tengo dificultades con la visibilidad de las variables en los ficheros, la definición de las librerías y su visibilidad.</div><div><br></div><div>Pongo un ejemplo, es un poco estúpido pero creo que sirve:</div><div><span class="Apple-style-span" style="text-decoration: underline;">Es posible que esta división se pueda mejorar, me gustaría que me aconsejarais sobre la separación de código.</span></div><div><br></div><div><b>head.h</b> --> hecha como cabecera de main.cpp</div><div><br></div><div><div>#include <iostream> </div><div>#include <stdio.h></div><div>#include <string></div><div><br></div><div>#include "../include/log.h"</div><div><br></div><div>class persona {</div><div>   private:</div><div>      // Datos miembro de la clase "pareja"</div><div>      int telefono, DNI; </div><div>   public:</div><div>      // Funciones miembro de la clase "pareja"</div><div>      string nombre[10], apellidos[30];</div><div>      </div><div>      void Guarda(string name, string family_name)</div><div>      {</div><div>      <span class="Apple-tab-span" style="white-space:pre">      </span>nombre=name;</div><div>      <span class="Apple-tab-span" style="white-space:pre">       </span>apellidos=family_name;</div><div>      }</div><div>      void datos_privados(int phone_numer, int id_card)</div><div>      {</div><div>      <span class="Apple-tab-span" style="white-space:pre">       </span>telefono=phone_number;</div><div>      <span class="Apple-tab-span" style="white-space:pre">     </span>DNI=id_card;</div><div>      }</div><div>      void imprime(int a2, int b2) </div><div>      {</div><div>         cout << nombre <<endl;         </div><div>      }</div><div>};</div><div><br></div></div><div><b>main.cpp</b></div><div><br></div><div><div>#include "head.h"</div><div>#include "funciones.h"</div><div> </div><div>using namespace std;</div><div><br></div><div>// Variable global</div><div>int num=0,,k,y,z;</div><div>string mensaje;</div><div> </div><div>int main()</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>int valor=0;</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>persona maziu;</div><div><span class="Apple-tab-span" style="white-space:pre">       </span></div><div>    printf("Hola mundo\n");</div><div>    num=++;;</div><div>    //Guardamos los valores dentro en su sitios</div><div>    maziu.Guarda("Alberto", "Bielsa Noveleta");</div><div>    </div><div>    if(num==1)</div><div>    {</div><div>    <span class="Apple-tab-span" style="white-space:pre">      </span>control(maziu, num);</div><div>    }</div><div>   </div><div>    valor=modificacion1(valor);</div><div>    if (valor==5)</div><div>    {</div><div>    <span class="Apple-tab-span" style="white-space:pre">   </span>printf("oK!!!! %d\n",valor);</div><div>    }</div><div>    maziu.imprime</div><div>    </div><div>    exit(0); </div><div>}</div></div><div><br></div><div><b>funciones.h</b></div><div><br></div><div><div><br></div><div>int modificacion1(int valor);</div><div>int modificacion2(int val);</div></div><div><br></div><div><b>funciones.cpp</b></div><div><br></div><div><div>#include "funciones.h"</div><div>#include "head.h"</div><div><br></div><div>extern int num; //Definición de las variables globales.</div><div><br></div><div>int modificacion1(int val_or)</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>printf("Funciona el fichero de cabecera\n");</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>val_or=1;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>if(val_or==1)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>val_or=modificacion2(val_or);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>num+=1;</div><div><span class="Apple-tab-span" style="white-space:pre">      </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>return(val_or);</div><div>}</div><div><br></div><div>int modificacion2(int val)</div><div>{</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>printf("Segunda función %d\n", val);</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>val+=5;</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>if (num==2)</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>printf("Hola");</div><div><span class="Apple-tab-span" style="white-space:pre">            </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>return(val);</div><div>}</div></div><div><br></div><div><b>control.h</b></div><div><br></div><div><div>#include <math.h></div><div>//En control.cpp necesito usar la librería matematica</div><div><br></div><div>void control(persona x, int b);</div><div>bool condicion();</div></div><div><br></div><div><span class="Apple-style-span" style="font-weight: bold; ">control.cpp</span></div><div><b><br></b></div><div><b><div><span class="Apple-style-span" style="font-weight: normal;">#include "control.h"</span></div><div><span class="Apple-style-span" style="font-weight: normal;"><br></span></div><div><span class="Apple-style-span" style="font-weight: normal;">void control(persona x, int b)</span></div><div><span class="Apple-style-span" style="font-weight: normal;">{</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">      </span></span><span class="Apple-style-span" style="font-weight: normal;">int resul=0;</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">   </span></span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">  </span></span><span class="Apple-style-span" style="font-weight: normal;">resul=pow(b,b);</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">        </span></span><span class="Apple-style-span" style="font-weight: normal;">if(num=2)</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">      </span></span><span class="Apple-style-span" style="font-weight: normal;">{</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">              </span></span><span class="Apple-style-span" style="font-weight: normal;">x.imprime();</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">   </span></span><span class="Apple-style-span" style="font-weight: normal;">}</span></div><div><span class="Apple-style-span" style="font-weight: normal;">}</span></div><div><span class="Apple-style-span" style="font-weight: normal;"><br></span></div><div><span class="Apple-style-span" style="font-weight: normal;">bool condicion()</span></div><div><span class="Apple-style-span" style="font-weight: normal;">{</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">  </span></span><span class="Apple-style-span" style="font-weight: normal;">persona Roberto;</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">       </span></span><span class="Apple-style-span" style="font-weight: normal;">int sol=0;</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">     </span></span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">  </span></span><span class="Apple-style-span" style="font-weight: normal;">sol=sqrt(pow(k,z));</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">    </span></span><span class="Apple-style-span" style="font-weight: normal;">if(sol<10)</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">  </span></span><span class="Apple-style-span" style="font-weight: normal;">{</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">              log_escribir("Todo funciona bien"); // llamada a procedimeinto de la librería externa 'log'.</span></span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;"></span></span><span class="Apple-style-span" style="font-weight: normal;"><span class="Apple-tab-span" style="white-space:pre">             </span>return true;</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">      </span></span><span class="Apple-style-span" style="font-weight: normal;">}</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">      </span></span><span class="Apple-style-span" style="font-weight: normal;">else</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">   </span></span><span class="Apple-style-span" style="font-weight: normal;">{</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">              </span></span><span class="Apple-style-span" style="font-weight: normal;">return false;</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">  </span></span><span class="Apple-style-span" style="font-weight: normal;">}</span></div><div><span class="Apple-style-span" style="font-weight: normal;">}</span></div><div><span class="Apple-tab-span" style="white-space:pre"><span class="Apple-style-span" style="font-weight: normal;">   </span></span></div><div><span class="Apple-style-span" style="font-weight: normal; white-space: pre;"><br></span></div><div><span class="Apple-style-span" style="font-weight: normal; white-space: pre;">FINAL</span></div><div><span class="Apple-style-span" style="font-weight: normal; white-space: pre;"><br></span></div><div><span class="Apple-style-span" style="font-weight: normal; white-space: pre;"><br></span></div></b></div><div><div><div>On 19/05/2010, at 9:04, Steven Davidson wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Hola Jorge,<br><br><div class="gmail_quote">2010/5/18 Jorge Vega Sanchez <span dir="ltr"><<a href="mailto:memmaker650@gmail.com">memmaker650@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"> Buenas<br> <br> Llevo unos días trabajando con un programa  que ya funciona y estoy probando a distribuirlo en varios ficheros porque veo el código muy desordenado. Quiero distribuir el código en varios ficheros para tenerlo más ordenado y que sea más fácil ampliar el código y que sea legible. El problema viene en que ando muy perdido en esto porque no encuentro documentación y estoy probando alguna cosa que he visto pero no cumple todo lo que quiero. Y no sé como enlazarlo todo.<br> <br> Mi programa tiene: variables globales, 4 procediemientos generales y 2 procedimientos de control y un programa principal.<br> <br> Me gustaría dividirlo en uno/dos ficheros de cabecera y 3 ficheros fuente. 1 donde este el main, otro donde esten los procedimientos de control y otro donde estén los procedimientos generales. En la cabecera incluyo una librería externa.<br> <br> <br></blockquote><div><br><br>Sin conocer los detalles ni el problema exacto, no podemos ser muy precisos en nuestra respuesta. Aparte de la ordenación del código, la separación del código en diferentes ficheros ofrece también una oportunidad para agrupar y relacionar el código lógicamente.<br> <br>A mi parecer, el mayor problema que puedas tener es con las variables globales. Defínelas en un fichero fuente, pero decláralas en los demás donde las vayas a usar. Esto implica que deberás usar 'extern' a la hora de declarar las variables globales que necesitas, pero sin (re)definirlas. Por ejemplo,<br> <br>// codigo01.h<br><br>extern int g_num;<br>extern float g_real;<br><br><br>// codigo01.cpp<br><br>int g_num = 10;<br> float g_real = -.5009;<br> <br><br>// codigo02.h<br><br>#include "codigo01.h"<br><br>struct punto4d { double x,y,z,w; };<br><br>extern punto4d g_origen;<br> <br><br>// codigo02.cpp<br> <br>punto4d g_origen = { 0.0, 0.0, 0.0, 1.0 };<br> <br><br>// main.cpp<br><br>#include "codigo01.h"<br>#include "codigo02.h"<br> <br>int main()<br>{<br>  punto4d p;<br><br>  p.x = g_origen.x * g_num + g_real;<br>  p.y = g_origen.x * g_num + g_real;<br>   p.z = g_origen.x * g_num + g_real;<br>   p.w = g_origen.x;<br>  ...<br>  return 0;<br>}<br><br><br><br>Espero que esto te oriente.<br> </div></div>Steven<br><br> _______________________________________________<br>Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br><a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a></blockquote></div><br></div></body></html>