duda sobre funciones

Iniciado por 0xFer, 18 Abril 2015, 04:49 AM

0 Miembros y 1 Visitante están viendo este tema.

0xFer

Hola, tengo una función en un fichero diferente al main.cpp, y quiero que esa función pueda ser llamada desde el fichero main, cómo le hago? :-\

Me pueden dar unos ejemplos? , gracias de antemano.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

Gh057

#1
Hola, simplemente debes indicar mediante comillas en una sentencia include, el arhivo de cabecera de funciones externas que quieras agregar:

por ejemplo en tu main.cpp

#include "cifrados.h"

int main()
{
  ....
  caesar(x);
  ....
return 0;
}


en tu biblioteca tendrìas las declaraciones de dichas funciones, un arhivo metodos_cifrado.h con algo como

#ifndef CIFRADOS_H
#define CIFRADOS_H
      .....
       void caesar(*char);
       void vigenere (*char);
       .....
#endif


mientras que tus declaraciones las haces en metodos_cifrados.cpp

#include "cifrados.h"

void caesar(*char)
{
  ......
}
void vigenere(*char)
{
  ......
}

etc...
a grosso modo... Serìa el diseño de lo que se denomina una biblioteca estàtica.
Puedes ubicarla en una carpeta para que quede màs organizado... recuerda entonces poner correctamente el path en el include.

Creas la biblioteca en sí del siguiente modo..
Citar
gcc -static -c cifrados.cpp -o cifrados.o
ar -rcs libcifrados.a cifrados.o
(de esta manera puede accederse luego como si fuera una del sistema)

La enlazas luego por ejemplo con
Citarg++ -L. -Icifrado.h main.cpp -o cifrando_texto

Bueno todo esto puede automatizarse con makefile, o bien hacerlo desde una IDE... pero bàsicamente esta es la idea. Saludos

(edito) modifiqué los nombres para evitar confusión en la biblioteca, así como agregué la parte de la creación de la biblioteca estática propiamente dicha, antes del enlace.
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

0xFer

Hola, me funciona todo bien así como dices, pero cuando quiero hacer lo mismo con una función de tipo inline me lanza el error: undefined reference to `funcion(short*, short*, short)'|
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

Gh057

Hola, debes tener todas las funciones externas declaradas correctamente en la cabecera .h, sino no podrás enlazarlas luego.
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...