Ver Mensaje Individual
  #12 (permalink)  
Antiguo 17/07/2013, 21:38
ambigus
 
Fecha de Ingreso: septiembre-2008
Mensajes: 221
Antigüedad: 16 años, 1 mes
Puntos: 1
Pregunta Respuesta: Programación Orientada en Objetos de C++

Gracias, una duda:

¿Porqué me dice en las lineas 114 y 123 -> el identificador "leer_nodo" no esta definido?, ¿Cómo lo defino? Si anteriormente sólo definia void lista::función

¿Porqué también me dice en la linea 160-> el identificador "inicial" no está definido?

Código C++:
Ver original
  1. #include "stdafx.h"
  2. #include "iostream"
  3. #include <conio.h>
  4. using namespace System;
  5. using namespace std;
  6.      
  7.     struct nodo
  8.     {
  9.         int   codigo; // Nuevo
  10.         char *nombre; // Nuevo
  11.         int   nivel; // Nuevo
  12.         nodo *sig;
  13.      
  14.     };
  15.      
  16.     class lista // Nueva clase - Lista
  17.     {
  18.         private:
  19.             nodo *inicial;
  20.         public:
  21.             lista();   // La lista  - Publico
  22.             ~lista();  // ~La lista - Publico
  23.      
  24.             void crear_lista(nodo *anterior, nodo *nuevo); // Funcion "crear_lista" - Publico
  25.             void leer_nodo(nodo *nuevo); // Funcion - Leer nodo
  26.             void imprime_nodo(nodo *apun);
  27.             void reco_recur(); // Cambio - Nueva Funcion Recursiva
  28.             void reco_recur(nodo *apun); // Cambio - Nueva Funcion Recursiva
  29.            
  30.     };
  31.      
  32.     lista::lista()
  33.     {
  34.         inicial=NULL; // Inicializa NULL
  35.     }
  36.  
  37.     /////////////////////////////////////////////////////
  38.     void lista::leer_nodo(nodo *nuevo) // Método - Leer nodo
  39.     {
  40.         cout<<"Entre codigo del estudiante"<<endl;  // Nuevo
  41.         cin>>nuevo->codigo;                         // Nuevo
  42.         cout<<"Entre nombre del estudiante"<<endl;  // Nuevo
  43.         cin.ignore();                               // Nuevo
  44.         nuevo->nombre=new char[30];                 // Nuevo
  45.         cin.getline(nuevo->nombre,30);              // Nuevo
  46.         cout<<"Entre nivel del estudiante"<<endl;   // Nuevo
  47.         cin>>nuevo->nivel; 
  48.     }
  49.  
  50.     /////////////////////////////////////////////////////
  51.     void lista::crear_lista(nodo *anterior, nodo *nuevo)
  52.     {
  53.         if(anterior == NULL)
  54.         {
  55.             nuevo->sig = inicial;
  56.             leer_nodo(nuevo); // Lee 1ra vez
  57.             inicial = nuevo;
  58.         }
  59.         else
  60.         {
  61.             nuevo->sig = anterior->sig;
  62.             anterior->sig = nuevo;
  63.             leer_nodo(nuevo); // Lee N vez
  64.         }
  65.     }
  66.  
  67.     /////////////////////////////////////////////////////
  68.     void lista::imprime_nodo(nodo *apun) // Cambio
  69.     {
  70.         cout<<"-----------------------------"<<endl;
  71.         cout<<"El codigo es:     "<<apun->codigo<<endl;
  72.         cout<<"El nombre es:     "<<apun->nombre<<endl;
  73.         cout<<"El nivel  es:     "<<apun->nivel<<endl;
  74.         cout<<"-----------------------------"<<endl;
  75.        
  76.     }
  77.  
  78.     /////////////////////////////////////////////////////
  79.     void lista::reco_recur() // Cambio - Nueva Funcion Recursiva - Se crea debido a conflictos con la recursividad en la forma Estructural
  80.         {
  81.             reco_recur(inicial);
  82.         }
  83.    
  84.     /////////////////////////////////////////////////////
  85.     void lista::reco_recur(nodo *apun) // Cambio - Nueva Funcion Recursiva
  86.         {
  87.             if (apun != NULL)
  88.             {
  89.                 imprime_nodo(apun); // Imprime valor nodo
  90.                 reco_recur(apun->sig); // Cambio - Nueva Funcion Recursiva
  91.             }
  92.         }
  93.      
  94.  
  95.     /////////////////////////////////////////////////////
  96. nodo *buscar_nodo(nodo *apun,int &codigo)
  97. {
  98.     while(apun != NULL)
  99.     {
  100.         if(apun->codigo==codigo)return apun;
  101.         else apun=apun->sig;
  102.     }
  103.     return NULL;
  104. }
  105.  
  106. /////////////////////////////////////////////////////
  107. nodo *agregar_nodo(nodo *anterior,nodo *nuevo,int &codigo)
  108. {
  109.     if(codigo == 0)
  110.     {
  111.         //agrega al inicio de la lista
  112.         nuevo->sig=anterior;
  113.         anterior=nuevo;
  114.         leer_nodo(nuevo);
  115.         return anterior;
  116.     }
  117.     else
  118.     {
  119.         //Agrega despues del primero, segundo,..., o último
  120.         //elemento de la lista
  121.         nuevo->sig=anterior->sig;
  122.         anterior->sig=nuevo;
  123.         leer_nodo(nuevo);
  124.         return anterior;
  125.     }
  126. };
  127.  
  128.  
  129.     lista::~lista() // Metodo "borrar_lista" es el desctructivo- Publico
  130.     {
  131.         nodo *apun = inicial; // " * " es para crear nodo
  132.         while(apun != NULL)
  133.         {
  134.             cout << "borro" << endl;
  135.             inicial = apun->sig;
  136.             delete apun;
  137.             apun = inicial;
  138.         }
  139.     }
  140.      
  141.     int main()
  142.     {
  143.         nodo *anterior, *nuevo, *apun; char resp; anterior=NULL;
  144.         lista objlista; // Dar memoria a la lista
  145.         cout<<"EMPIEZA A CREAR LA LISTA ORIGINAL"<<endl<<endl;;
  146.         do
  147.         {
  148.             nuevo = new nodo;
  149.             objlista.crear_lista(anterior, nuevo); 
  150.             anterior = nuevo;
  151.             cout<<endl ;
  152.             cout<<"DESEA CREAR OTRO NODO? (s/n) "<<endl<<endl;;
  153.             cin>>resp;
  154.             resp=tolower(resp);
  155.         }while(resp != 'n');
  156.  
  157.         //inicio del recorrido de la lista
  158.         cout<<"LA LISTA ORIGINALMENTE CREADA ES : "<<endl;
  159.         apun = inicial;
  160.         objlista.reco_recur();
  161.         //inicio de la agregación de nuevos nodos
  162.         cout<<endl ;
  163.         cout<<"INICIO DE LA AGREGACION DE NUEVOS NODOS A LA LISTA ORIGINAL"<<endl;
  164.         int codigo;
  165.         apun=inicial;
  166.         do
  167.         {
  168.                 cout<<endl;
  169.                 cout<<"Entre codigo clave (Digite 0 si va agregar a la cabeza de la lista,"<<endl;
  170.                 cout<<"en caso contrario digite el codigo del nodo anterior al que va a crear) "<<endl<<endl;
  171.                
  172.                 cin>>codigo ;
  173.                 if(codigo==0)
  174.                 {
  175.                     nuevo =new nodo;   
  176.                     inicial = agregar_nodo(inicial,nuevo,codigo);
  177.                 }
  178.                 else
  179.                 {
  180.                     anterior=inicial;
  181.                     anterior = buscar_nodo(anterior,codigo);
  182.                 if(anterior!=NULL)
  183.                 {
  184.                     nuevo =new nodo;
  185.                     anterior = agregar_nodo(anterior,nuevo,codigo);
  186.                 }
  187.                 else cout<<"El nodo no ha sido encontrado "<<endl;
  188.                 }
  189.                 cout<<"DESEA AGREGAR OTRO NODO (s/n)"<<endl;
  190.                 cin>>resp;
  191.                 resp=tolower(resp);
  192.         }while(resp != 'n');
  193.  
  194.         cout<< "LA LISTA COMPLETA ES: "<<endl;
  195.         apun = inicial;
  196.         objlista.reco_recur();
  197.         getch();
  198.         objlista.~lista();
  199.         return 0;
  200. }