Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pacman22 en 26 Octubre 2014, 04:17 am



Título: C - Error undeclared (first use in this function)
Publicado por: pacman22 en 26 Octubre 2014, 04:17 am
Estoy haciendo un tad , y declare la interfaz

#ifndef CONJUNTOENTERO_INTERFAZ_H
#define CONJUNTOENTERO_INTERFAZ_H
/* Estructura de datos */
typedef struct {
      int elementos[30];
      int cardinalidad;
      int tama;
}   conjuntoEnteros;
      

/*Declaracion de las operaciones */
void Iniciar(conjuntoEnteros *conjuntoA[],int tam);
void Mostrar(conjuntoEnteros *conjuntoA[]);
short int Pertenece(int x, conjuntoEnteros conjuntoA[]);
void Agregar(int x ,conjuntoEnteros *conjuntoA[]);

y la implementacion

#include "ConjuntoEntero_Interfaz.h"
#include <stdio.h>

/*Inicializa el conjunto en vacio*/
void Iniciar(conjuntoEnteros *conjuntoA[], int tam)
   {
       conjuntoA>tama=tam;
       conjuntoA>cardinalidad=0;
   }

/*Muestra los elementos de un conjunto*/
void Mostrar(conjuntoEnteros *conjuntoA[]);
   {
      int i;
      
      for(i=0;i<conjuntoA.cardinalidad;i++)
      {
         printf("n\ Elemento %d",conjuntoA.elementos)
      }
   }

/*Verificar si el elemento ya pertenece al conjunto*/
/*Devuelve 0 si no se encuentra en el conjunto*/
/*Devuelve 1 si se encuentra en el conjunto*/
short int Pertenece(int x, conjuntoEnteros conjuntoA[])
   {
      int i,valor;
      
      i=0;
      while (x != conjuntoA.elementos)
         {
            i++;
         }
      if (i>conjuntoA.cardinalidad)
         valor=0;
      else
         {
            valor=1;
         }
      return valor;
   }
/*Agregar un elemento al conjunto*/   
void Agregar(int x ,conjuntoEnteros *conjuntoA[])      
   {
      int i;
      
      if (pertenece(x , conjuntoA[])=0
         {
            i=conjuntoA.cardinalidad;
            (*conjuntoA).elementos=x;
            (*conjuntoA).cardinalidad++
         }
      else
         {
            printf("n\ El elemento ya se encuentra en el conjunto");
         }
   }


Pero me sale este error :'tama' undeclared (first use in this function) . Cuando a tama ya lo declare en la interfaz. Alguna ayuda gracias :D


Título: Re: C - Error undeclared (first use in this function)
Publicado por: BloodSharp en 26 Octubre 2014, 04:41 am
Te estás haciendo un lío con los punteros de estructuras xD

Primero fijate las definiciones tuyas:
Código
  1. conjuntoEnteros *conjuntoA[]
  2. conjuntoEnteros conjuntoA[]);

En la primera estás haciendo como un "doble puntero" y en la segunda creo que está bien pero yo al menos lo definiría en todas las funciones así:

Ejemplo:
Código
  1. short int Pertenece(int x, conjuntoEnteros *conjuntoA);

Después tama no está definido porque lo estás usando como si fuera una variable ya definida en una operación de comparación mayor que(conjuntoA>tama=tam;)... para acceder a un dato de un puntero a una estructura sería así:

Código
  1. conjuntoA->tama=tam;

Solo lo podés usar con punto (conjuntoA.tama=tam;)si solo si la estructura no la envías como puntero, osea como si la tuvieses de variable global/local, pero en tu caso creo que estás o en realidad querías enviarla como puntero en cada parametro de tus funciones.

EDIT: Si podés usá la etiqueta GeSHi cuando escribás un mensaje en el foro porque el código escrito así nomás queda horrible a la vista :P


B#