elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Como entrelazar varios .cpp y error de código
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como entrelazar varios .cpp y error de código  (Leído 2,224 veces)
ToMMaC

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Como entrelazar varios .cpp y error de código
« en: 28 Enero 2016, 06:36 am »

Buenas noches, tengo varios problemas que espero poder solucionar, algunos son solo preguntas basicas, y otro un problema en el codigo, empezando por las preguntas.

Yo creo un proyecto, no? Entonces digo, bien, aqui termina la parte del menu que estoy programando, voy a crear un nuevo archivo .cpp , como hago para entrelazarlos? Es decir, yo tengo mi main.cpp con, por ejemplo, mi menu. En este selecciono el apartado, "Busqueda" Pero tengo todo el código de busqueda en otro archivo .cpp, como hago para iniciarlo desde mi main? Como tengo que armar el código del segundo .cpp para que pueda reconocerlo?

Bien, el problema de código es el siguiente


Yo estoy programando un simple programa de revision de asegurados,
En este el productor tiene la posibilidad de agregar, buscar, quitar, y modificar asegurados.

Ya la parte de buscar y agregar la tengo programada, el productor ingresa la patente
del vehiculo a asegurar y al hacerlo crea un .txt con la patente del asegurado, para
proximamente poner todos los datos de éste y asi guardarlo. Luego, cuando el productor intenta buscar, se le solicita la patente, que en realidad es el nombre del .txt previamente creado.
  Hasta ahi genial, mi problema viene a la hora de programar la funcion de "modificar" que nombre como "informar" pero al caso es lo mismo.
  La idea de modificarlo es crear un archivo temporal para despues eliminar el original y que el temporal pase a ser original.

El codigo no esta terminado, pero debería iniciar y poner en pantalla unos textos.
En lugar de eso me tira el siguiente error
  [Linker error] undefined reference to `error()'   ld returned 1 exit status

El codigo es largo, debido a que no se crear diferentes archivos y lograr entrelazarlos
Código:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
/*String para letras y numeros, char x[y] para letras, y float para numeros */
using namespace std;
void agregar ();
void buscar () ;
void eliminar ();
void instrucciones();
void informar();
void error ();
void modificar();
int resp;
int main()

{
    do{
    int resp; /*Esta variante sirve para las repuestas de "Volver y Salir" */
    int eleccion;
    system("cls"); /*Esto es para que se borren las lineas anteriores*/
    system("color 0F");/*Cambia el color de fondo/fuente */
    cout <<"Bienvenido al sistema de verificacion de pagos"<<endl;
    cout <<"Elija su operacion:"<<endl;
    cout<<"1-Agregar Asegurado"<<endl;
    cout<<"2-Buscar Asegurado"<<endl;
    cout<<"3-Eliminar Asegurado"<<endl;
    cout<<"4-Como usar el programa"<<endl;
    cout<<"5-Modificar Asegurado"<<endl;
    cout<<"Elija su opcion: "; cin>>eleccion;
    getch();
                 
   if(eleccion==1){ agregar()      ;while(resp==2);
}
                   
                   
    else if (eleccion==2){ buscar()     ;while(resp==2);
 
         }
         else if (eleccion==3){ eliminar();     while(resp==2);}
             
             
             
              else if (eleccion==4){
                   instrucciones();while(resp==2);}
                   
                   else if (eleccion==5){ informar();while(resp==2);}
                          else { error();while(resp==2);
                       
                         
                         }}
                        while(resp==2); }
                       
             
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//===========================================VOIDS===============================================================//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////             
     
void agregar() {
     int resp;
      system("cls");
                       string asegurado;
    cout<<"PATENTE A AGREGAR: ";
    cin >> asegurado;
    ofstream entrada(asegurado.c_str(),ios::out); ;
    if (entrada.fail())
    {
        cout << "El archivo no se creo correctamente" << endl;
   
}
                        else{
                             char nombre[20];
                             char apellido[20];
                             char compania[10];
                             char marca_vehiculo[30];
                             string modelo;
                             float ano;
                             string patente;
                             string carpeta;
                             string poliza;
                             string vigenciad;
                             string vigenciah;
                             string importe;
                             
                             cout <<"ES IMPORTANTE COLOCAR BIEN LOS DATOS PARA NO CREAR MAL EL ARCHIVO DEL ASEGURADO" <<endl;
                             cout <<"NO COLOCAR ESPACIOS, COLOCAR GUIONES BAJOS '_'" <<endl ;
                             cout <<"Nombre :"; cin>>nombre ;
                             cout <<"Apellido :"; cin>>apellido ;
                             cout <<"Compania :"; cin>>compania ;
                             cout <<"Marca :"; cin>>marca_vehiculo ;
                             cout <<"Modelo :"; cin>>modelo ;
                             cout <<"Ano :"; cin>>ano ;
                             cout <<"Patente :"; cin>>patente ;
                             cout <<"Carpeta :"; cin>>carpeta ;
                             cout <<"Poliza :"; cin>>poliza ;
                             cout <<"Vigencia Desde :"; cin>>vigenciad;
                             cout <<"Vigencia Hasta :"; cin>>vigenciah;
                             cout <<"Importe: "; cin>>importe;

                             
                             entrada<<nombre
                             <<" "
                             <<apellido
                             <<" "
                             <<endl
                             <<" "
                             <<compania
                             <<" "
                             <<endl
                             <<" "
                             <<marca_vehiculo
                             <<" "
                             <<endl
                             <<" ";
                             entrada
                             <<modelo
                             <<" "
                             <<endl
                             <<" "
                             <<ano
                             <<" "
                             <<endl
                             <<" "
                             <<patente
                             <<" "
                             <<endl
                             <<" "
                             <<carpeta
                             <<" "
                             <<endl
                             <<" "
                             <<poliza
                             <<" "
                             <<endl
                             <<" "
                             <<vigenciad
                             <<" "
                             <<vigenciah
                             <<" "
                             <<endl
                             <<" "
                             <<importe;
                             
                             entrada.close();
                             
                             cout<<"Los datos fueron almacenados correctamente"<<endl;
                             cout<<"--------------------------------------------------------"<<endl;
                             cout <<"1.Salir "<<endl;
                             cout <<"2.Volver "<<endl;
                             cout <<"Elija una opcion [1-2]";
                              cin>>resp;
                           
     
     
} }void buscar () {  ;
       
              system("cls");
         string asegurado;
     ifstream salida ;
     cout
     << "BUSQUE PATENTE: ";
      cin>>asegurado  ;   
     system ("cls");
     salida.open(asegurado.c_str(),ios::in) ;
     
     if (salida.fail()) {
                        cout<<"La patente ingresada es incorrecta o no existe" ;
                        getch();
       }else{
                               char nombre [20];
                               char apellido [20];
                               char compania [10];
                               char marca_vehiculo [20];
                               char modelo [20];
                               int ano;
                               string patente;
                               string carpeta;
                               int poliza;
                               string vigenciad;
                               string vigenciah;
                               string importe;
                               
                               salida>>nombre;
             
              while(!salida.eof()){
                                   
             
                             salida
                             >>apellido
                             >>compania
                             >>marca_vehiculo
                             >>modelo
                             >>ano
                             >>patente
                             >>carpeta
                             >>poliza
                             >>vigenciad
                             >>vigenciah
                             >>importe;
                     
                      cout <<"RESULTADO DE LA BUSQUEDA"<<endl;
                      cout <<"Nombre: "<<nombre<<endl;
                      cout <<"Apellido: "<<apellido<<endl;
                      cout <<"Compania: "<<compania<<endl;
                      cout <<"Marca Vehiculo: "<<marca_vehiculo<<endl;
                      cout <<"Modelo: "<<modelo<<endl;
                      cout <<"Ano: "<<ano<<endl;
                      cout <<"Patente: "<<patente<<endl;;
                      cout <<"Carpeta: "<<carpeta<<endl;
                      cout <<"Poliza: "<<poliza<<endl;
                      cout <<"Vigencia"<<vigenciad;
                      cout <<" "<<vigenciah<<endl;
                      cout <<"Monto: "<<importe<<endl;
                      cout<<"--------------------------------------------------------"<<endl;
                      cout <<"1.Salir "<<endl;
                      cout <<"2.Volver "<<endl;
                      cout <<"Elija una opcion [1-2]"; cin>>resp;
                       getch ();
                      }                   
     
     
     
      }
      }
     
     
      void eliminar (){
           system("cls");
              cout<<"Esta sección esta en desarrollo!"<<endl;
              cout<<"--------------------------------------------------------"<<endl;
              cout <<"1.Salir "<<endl;
              cout <<"2.Volver "<<endl;
              cout <<"Elija una opcion [1-2]"; cin>>resp;
              getch();
             
              }
                       
      void instrucciones (){
                   system("cls");
                   cout<<"**Este programa se utiliza dandole ordenes a la pantalla**"<<endl;
                   cout<<"**esta te pedira datos constantemente**"<<endl;
                   cout<<"**Y va a esperar una respuesta del usuario**"<<endl;
                   cout<<"**NO SE PUEDEN USAR ESPACIOS. USAR GUIONES BAJOS**"<<endl;
                   cout<<"**Para buscar datos, el programa revisa los archivos previamente**"<<endl;
                   cout<<"**bautizados al colocar el dominio de los vehiculos**"<<endl;
                   cout<<"**En el caso de haber una respuesta nula, escribir ceros**"<<endl;
                   cout<<"--------------------------------------------------------"<<endl;
                   cout <<"1.Salir "<<endl;
                   cout <<"2.Volver "<<endl;
                   cout <<"Elija una opcion [1-2]"; cin>>resp;
                   getch();
                   }
     
      void informar (){ system("cls");
           ofstream aux;
           ifstream lectura;
           char nombre [20];
           char apellido [20];
           char compania [20];
           string marca_vehiculo;
           string modelo;
           int ano;
           string carpeta;
           int poliza;
           string vigenciad;
           string vigenciah;
           string importe;
           
           bool encontrado=false;
           int patente;
           string asegurado;   
           aux.open("aux",ios::out);
           cout<<"Ingrese la PATENTE de la poliza a modificar"; cin>>asegurado;
           lectura.open (asegurado.c_str(),ios::in);
           if (lectura.fail()){ cout<<"Fallo";}
           else if (aux.is_open() && lectura.is_open()){
                             cout<<"nice";
Recien estoy empezando en este tema de programa asi que cualquier consejo va a ser gratamente recibido.
Desde ya muchisimas gracias.


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Como entrelazar varios .cpp y error de código
« Respuesta #1 en: 28 Enero 2016, 10:32 am »

¿Y dónde está la función "error()"?


En línea

ToMMaC

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Como entrelazar varios .cpp y error de código
« Respuesta #2 en: 28 Enero 2016, 17:57 pm »

Ya la encontre y solucioné(creo) el problema. Me podrian ayudar con mi duda de los .cpp? Gracias!
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Como entrelazar varios .cpp y error de código
« Respuesta #3 en: 28 Enero 2016, 20:22 pm »

Bien. En C++, la compilación tiene 2 fases.
En la primera, el código fuente se compila a código objeto (.o generalmente). Cada CPP, se compila a un archivo (generalmente, hay excepciones).
Luego, hay que unir todos esos archivos, donde el linker los entrelaza y genera el exe (en Windows).

Si trabajas con un IDE, estos pasos los hará probablemente solo, así que solo te debes preocupar de tener lso archvios en el proyecto.

Un detalle: para que el main (u otro archivo) pueda acceder a las funciones, clases y variables de otros archivos, estos archivos con funcionalidades han de tener una cabecera (.h o .hpp). La cabecera no se compila.
Un ejemplo:

main.cpp
Código
  1. #include "archivo.h"
  2.  
  3. int main(){
  4.    funcion();
  5. }

archivo.h
Código
  1. #ifndef ARCHIVO_H
  2. #define ARCHIVO_H
  3.  
  4. void funcion();
  5.  
  6. #endif ARCHIVO_H

archivo.cpp
Código
  1. #include "archivo.h"
  2.  
  3. #include <iostream>
  4.  
  5. void funcion(){
  6.    std::cout << "Hola" << std::endl;
  7. }

Como detalle adicional, ves las directivas de preprocesado IFDEF,DEFINE,ENDIF del .h. Estas están para que, si tienes varios archivos enlazados entre sí mediante include, no haya problemas, logrando que solo se declare 1 vez lo que el .h contenga.


En caso de que compiles con GCC, te puedo poner un ejemplo de compilación:
Código:
g++ -c main.cpp -o main.o
g++ -c archivo.cpp -o archivo.o
g++ main.o archivo.o -o main.exe
En línea

ToMMaC

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Como entrelazar varios .cpp y error de código
« Respuesta #4 en: 29 Enero 2016, 09:08 am »

Millones de gracias!
Código:
Loviu <3


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines