Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Error en la declaracion de apuntadores

Estas en el tema de Error en la declaracion de apuntadores en el foro de C/C++ en Foros del Web. Les muestro mi siguiente codigo, lo hice por secciones individuales y al unirlo, zaz! catastrofe. he trabajado muy poco tiempo con apuntadores y mi problema ...
  #1 (permalink)  
Antiguo 16/12/2011, 14:57
 
Fecha de Ingreso: diciembre-2011
Mensajes: 1
Antigüedad: 12 años, 4 meses
Puntos: 0
Pregunta Error en la declaracion de apuntadores

Les muestro mi siguiente codigo, lo hice por secciones individuales y al unirlo, zaz! catastrofe. he trabajado muy poco tiempo con apuntadores y mi problema principal es con la declaracion de ellos.

Código C++:
Ver original
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<stdlib.h>
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. typedef struct Nodo{
  8.         int cve;
  9.         char nomb[30];
  10.         char desc[30];
  11.         float preC;
  12.         float preV;
  13.         int exis;
  14.         char prov[30];
  15.         Nodo *sig;
  16.         }Nodo;
  17.        
  18. typedef struct Nodo2{
  19.         int cve;
  20.         char nomb[30];
  21.         char dire[30];
  22.         int tele;  
  23.         char mail[30];
  24.         char cont[30];
  25.         Nodo2 *sig;  
  26.         }Nodo2;
  27.        
  28.        Nodo *inicio;
  29.        Nodo *final;
  30.        Nodo2 *inicio2;
  31.        Nodo2 *final2;
  32.  
  33. int Mdart();
  34. int Mdpro();
  35. int Rdinv();
  36. int Rdped();
  37. int Ayuda();
  38. int Acerca();
  39. int Altart();
  40. int Bajart();
  41. int Conart();
  42. int Altpro();
  43. int Bajpro();
  44. int Conpro();
  45. Nodo Buscar(char);
  46. Nodo2 Buscar2(char);
  47. Nodo Buscar3(char);
  48. Nodo2 Buscar4(char);
  49. int Ayuda();
  50. int Acerca();
  51.  
  52. int main(){
  53.     int opc;
  54.     inicio=NULL;
  55.     final=NULL;
  56.     inicio2=NULL;
  57.     final2=NULL;
  58.     printf("\t\t\t\tBienvenido\n");
  59.     getch();
  60.     do{
  61.              system("cls");
  62.              printf("1. Manejo de articulos     Ctrl+A\n");
  63.              printf("2. Manejo de proveedores   Ctrl+R\n");
  64.              printf("3. Reporte de inventario   Ctrl+I\n");
  65.              printf("4. Reporte de pedidos      Ctrl+P\n");
  66.              printf("5. Ayuda                       F1\n");
  67.              printf("6. Acerca de                   F2\n");
  68.              printf("7. Salir                      Esc\n");
  69.              opc=getche();
  70.              switch(opc){
  71.                          case 1:Mdart();
  72.                               break;
  73.                          case 18:Mdpro();
  74.                               break;
  75.                          case 9:Rdinv();
  76.                               break;
  77.                          case 16:Rdped();
  78.                               break;
  79.                          case 59:Ayuda();
  80.                               break;
  81.                          case 60:Acerca();
  82.                               break;
  83.                          case 27:printf("Hasta pronto");
  84.                               break;
  85.                          }
  86.              }while(opc!=27);
  87.     }
  88.     int Mdpro(){
  89.     }
  90. int Mdart(){
  91.     int opc2;
  92.     do{
  93.         system("cls");
  94.         printf("Opciones de manejo de Articulos   Tecla");
  95.         printf("1.-Alta de Articulos");
  96.         printf("2.-Baja de Articulos");
  97.         printf("3.-Consultar Articulos");
  98.         printf("4.-Volver a Menu Principal");
  99.         opc2=getche();
  100.              switch(opc2){
  101.                           case 4:Altart();
  102.                                break;
  103.                           case 5:Bajart();
  104.                                break;
  105.                           case 61:Conart();
  106.                                break;
  107.                           }
  108.         }while(opc2!=62);
  109. }
  110.  
  111. int Altart(){
  112.     Nodo *l,*n;
  113.     int x,i,dec;
  114.     char y[30];
  115.     float z;
  116.     do{
  117.           n=(Nodo*)malloc(sizeof(Nodo));
  118.           printf("Clave:");
  119.           scanf("%d",&x);
  120.           n->cve=x;
  121.           printf("Nombre:");
  122.           scanf("%s",&y);
  123.           n->nomb=y;
  124.           printf("Descripcion:");
  125.           scanf("%s",&y);
  126.           (n->desc)=y;
  127.           printf("Precio de Compra:");
  128.           scanf("%f",&z);
  129.           n->preC=z;
  130.           printf("Precio de venta:");
  131.           scanf("%f",&z);
  132.           n->preV=z;
  133.           printf("Existencia:");
  134.           scanf("%d",&x);
  135.           n->exis=x;
  136.           printf("Provedor:");
  137.           scanf("%d",&y[1000]);
  138.           *(n->prov)=y[1000];
  139.           if(inicio=NULL){
  140.                           inicio=n;
  141.                           inicio->sig=NULL;
  142.                           final=n;
  143.                           final->sig=NULL;
  144.                           printf("Articulo dado de alta");
  145.                           }
  146.           else{
  147.                l=inicio;
  148.                i=0;
  149.                while((l->sig!=NULL)&&(i=0)){
  150.                                             if(*(l->nomb)=*(n->nomb)){
  151.                                                                     i=1;
  152.                                                                     }
  153.                                             l=l->sig;
  154.                                             }
  155.                if(i=1){
  156.                        printf("El articulo que desea ingresar ya esta dado de alta");
  157.                        }
  158.                else{
  159.                     final->sig=n;
  160.                     final=n;
  161.                     final->sig=NULL;
  162.                     printf("Articulo dado de alta");
  163.                     }
  164.                }
  165.           printf("¿Desea dar de alta otro articulo?   1.-Si   2.-No");
  166.           scanf("%d",&dec);
  167.     }while(dec!=2);
  168. }

Como ven solo agregue la funcion dar de alta, ya que con esa se podra notar el error (ademas de que no vean las otras 360 lineas de codigo xd). El compilador que uso es Bloodshed Dev-C++ 4.9.9.2 y el error que me marca es C:\Users\HP\Desktop\correcion.cpp ISO C++ forbids assignment of arrays. Si notan son las declaraciones de los apuntadores. Me he partido la cabeza pensado en como arreglarlo pero las "soluciones" que he hecho solo ya no me hacen lo que necesito y crean bucles infinitos. Por favor un poco de ayuda con las declaraciones

Si no me di a entender por favor comenten.
  #2 (permalink)  
Antiguo 17/12/2011, 14:33
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 4 meses
Puntos: 25
Respuesta: Error en la declaracion de apuntadores

hola "paranoya_32", mirá copie el codigo que proveiste en mi compilador (zinjai++) y encontre 2 lineas de error que son el mismo tipo de error, puede que sea el mismo que te da tu compilador.

los errores son en las lineas 123 y 126.

el problema es que al trabajar con variables de tipo char no puedes usar el operador = para copiar una cadena en otra. Para realizar esta operacion tenés que usar la función strcpy.

char * strcpy (char *Destination, const char *Source)

lo que hace esta funcion en copiar la cadena de caracteres contenida en la direccion de memoria de Source en la direccion de memoria de Destination. Tambien retorna la direccion de memoria de Destination en caso de que la quieras guardar en otra variable.


por lo que tendrias que modificar las lineas 123 y 126 de la siguiente manera:

Código C++:
Ver original
  1. //n->nomb=y;
  2. strcpy(n->nomb, y); //linea 123 modificada
  3.  
  4. //(n->desc)=y;
  5. strcpy(n->desc, y); //linea 126 modificada

Saludos, espero que haya sido la respuesta que esperabas

Etiquetas: apuntadores, declaracion, funcion, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:32.