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

Error al pasar un arreglo Struc a una funcion. Lenguaje C#

Estas en el tema de Error al pasar un arreglo Struc a una funcion. Lenguaje C# en el foro de C/C++ en Foros del Web. Amigos esta pregunta va con caracter mas que urgente ya que mañana tengo el parcial y me esta dando error lograr lo siguiente! Vale aclarar ...
  #1 (permalink)  
Antiguo 22/11/2012, 22:45
 
Fecha de Ingreso: noviembre-2012
Mensajes: 26
Antigüedad: 11 años, 5 meses
Puntos: 0
Error al pasar un arreglo Struc a una funcion. Lenguaje C#

Amigos esta pregunta va con caracter mas que urgente ya que mañana tengo el parcial y me esta dando error lograr lo siguiente!

Vale aclarar que trabajo con C y no con C++ y que el archivo con el que trabajo es de extencion *.cpp. Tambien me da error al compilar con windows o linux en ambos no puedo lograr lo que necesito...

Necesito pasar una estructura local al main, por referencia a otra funcion...
Basicamente yo declaro las cosas de la siguiente manera:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//==============ESTRUCTURA=================//
	struct datoscli {
		     	  int Monto;
   		   	 };

	struct datosreg {
		    	 struct datoscli datos[999];
		   	};
//===============FUNCIONES==================//
void Graba_Fact (struct datosreg *v[]);


int main()/*PRINCIPAL*/
{	
struct datosreg inforeg[2], *punterovector; //El puntero creo que debo usarlo para pasar la estructura, pero no se como.
.
.
.//bue aca va el resto del codigo...
.
//============Pasando Vector a funcion==============//

Graba_Fact(&inforeg); 

}//Fin Main

//Aca afuera deberia ir la funcion
void Graba_Fact (struct datosreg *v[])
{.
.....
......
}


Dejo el codigo completo para que tengan una mejor idea.
Código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>


//==============ESTRUCTURA=================//
	struct datoscli {
		     	  int Monto;
   		   	 };

	struct datosreg {
		    	 struct datoscli datos[999];
		   	};
		   	
//===============FUNCIONES==================//
void Graba_Fact (struct datosreg *v[]);



int main()/*PRINCIPAL*/
{	


//==========Variables===============//
struct datosreg inforeg[2], *punterovector;

int codreg, numcli; 				//Variables de Codigo de Region y Numero de Cliente respectivamente. 
int band0=0,band1=0,band2=0; 			//Las banderas se usan en los Case del switch.
int Maxcli0=0, Maxcli1=0, Maxcli2=0;		//Numero de cliente con el MAximo monto.
int MaxMonto0=0, MaxMonto1=0, MaxMonto2=0;	//Monto Maximo correspondiente a region 1 - 2 y 3.





//==========Comienzo================//


system("cls");



printf ("Ingrese codigo de region (1 - 2 - 3) 0=SALIR:");
scanf ("%d",&codreg);
		while(codreg>0 && codreg<4)	{//0 Para SALIR
					printf("\nIngese Numero Cliente:");
					scanf ("%d",&numcli);
					printf("\nIngese Monto:");
					scanf("%d",&inforeg[codreg-1].datos[numcli].Monto);
						



						switch(codreg)//El switch se encarga de seleccionar el lugar donde guardar el maximo dependiente de la region.
							{
							case 1:								
								if(band0=0 || inforeg[0].datos[numcli].Monto > MaxMonto0) 		
								{	
									band0=1;
									Maxcli0=numcli;
									MaxMonto0=inforeg[0].datos[numcli].Monto;
								};break;
							



							case 2: 							
								if(band1=0 || inforeg[1].datos[numcli].Monto > MaxMonto1) 		
								{	
									band1=1;
									Maxcli1=numcli;
									MaxMonto1=inforeg[1].datos[numcli].Monto;
								};break;
							

							
							



							case 3:							
								if(band2=0 || inforeg[2].datos[numcli].Monto > MaxMonto2) 		
								{	
									band2=1;
									Maxcli2=numcli;
									MaxMonto2=inforeg[2].datos[numcli].Monto;
								};break;
							
								
							}
			
					
					printf ("\n\nIngrese PROXIMO codigo de region (1 - 2 - 3) 0=SALIR:");
					scanf ("%d",&codreg);			
				};//Fin While.

//============Pasando Vector a funcion==============//

Graba_Fact(&inforeg);

//===============Finalizando=================//

printf("\n\nLos mayores son:");
printf("\nCod Reg..........Nro.Cli..........Monto\n");

printf("....1..............%d..............%d\n",Maxcli0,MaxMonto0);
printf("....2..............%d..............%d\n",Maxcli1,MaxMonto1);		
printf("....3..............%d..............%d\n",Maxcli2,MaxMonto2);

printf("\n\n FIN \n\n\n");
return 0;
}/*FIN MAIN*/
  #2 (permalink)  
Antiguo 23/11/2012, 01:20
 
Fecha de Ingreso: noviembre-2010
Ubicación: Venezuela
Mensajes: 24
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Error al pasar un arreglo Struc a una funcion. Lenguaje C#

Hola pablo, no soy muy bueno el la programacion y tengo tiempo sin programar pero investigando un poco en la red encontre esto:

Cita:
Hola

Un 'vector' (entendido como array) SIEMPRE se pasa por referencia, es decir, se pasa la dirección de memoria del primer elemento del array. Si se pasase por valor (q no se pasa) se debería copiar en una variable local (del stack) todo el contenido de la estructura, lo q lo hace poco viable.

En tu caso, como tampoco estoy seguro de qué quieres hacer, te doy las dos opciones. Si lo único q quieres pasar es el array de estructuras:
Código:

int main(){
struct dades contactes[1000];
menu(contactes);
}

void menu(struct dades con[]);

Si lo q quieres es realmente pasar la dirección de memoria, donde está el puntero de los datos, como parece q quieres hacer, entonces deberás realizar un cast:

Código:

int main(){
menu((struct dades **) &contactes);
}
void menu(struct dades* con[]){...}

Saludos.
Fuente: http://www.elrincondelc.com/nuevorincon/foros/viewtopic.php?p=42190&sid=4ff47faaf14ece2295ce3c9f c017ce24

espero te sirva.
  #3 (permalink)  
Antiguo 23/11/2012, 10:00
 
Fecha de Ingreso: noviembre-2012
Mensajes: 26
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error al pasar un arreglo Struc a una funcion. Lenguaje C#

Antes que nada Muchisimas gracias por tu respuesta!!!

Eso lo he probado y ma da el siguiente mensaje de error: Grabar.cpp:(.text+0x241): undefined reference to `Graba_Fact(datosreg**)'
collect2: ld devolvió el estado de salida 1
No es el compilador ya compilando con gcc y con g++ me da el mismo error, y en Win compilo con Dev C++ y tambien el mismo error.
Basicamente este es mi codigo.

Código:
#include <stdio.h>
#include <stdlib.h>

//========DECLARACION FUNCIONES===========//
void Graba_Fact(struct datosreg* con[]);


//==============ESTRUCTURA=================//
	struct datoscli {
		     	  int Monto;
   		   	 };

	struct datosreg {
		    	 struct datoscli datos[999];
		   	};



//============COMIENZO MAIN==============//
int main() { struct datosreg inforeg[2]; //DECLARO LA STRUC COMO LOCAL Y NO GLOBAL PORQUE ASI ME LO PIDEN EN LA FACULTAD. //===Pasando Vector a funcion====// Graba_Fact((struct datosreg **) &inforeg); }
//===============FIN MAIN==================// //========RESOLUCION DE FUNCION==========// void menu(struct datosreg* con[]) { //Aca por el momento no tengo nada para evitar posibles errores también. } //==============FIN FUNCION=============//
ERROR QUE DEVUELVE ESTO:
Código:
Grabar.cpp:(.text+0x241): undefined reference to `Graba_Fact(datosreg**)'
collect2: ld devolvió el estado de salida 1
  #4 (permalink)  
Antiguo 23/11/2012, 10:26
 
Fecha de Ingreso: noviembre-2012
Mensajes: 24
Antigüedad: 11 años, 5 meses
Puntos: 3
Respuesta: Error al pasar un arreglo Struc a una funcion. Lenguaje C#

Declaraste la funcion Graba_Fact pero luego no la definiste. Al invocarla se genera un error.

Una sugerencia, si usas solo un dato int en una estructura y luego creas un arreglo de esos valores tal ves te convenga usar una sola estructura.

Código C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. //========DECLARACION FUNCIONES===========//
  5. void Graba_Fact(struct datosreg* con[]);
  6.  
  7.  
  8. //==============ESTRUCTURA=================//
  9.     struct datoscli {
  10.                   int Monto;
  11.              };
  12.  
  13.     struct datosreg {
  14.                  struct datoscli datos[999];
  15.             };
  16.  
  17.  
  18.  
  19. //============COMIENZO MAIN==============//
  20.  
  21.     int main() { struct datosreg inforeg[2]; //DECLARO LA STRUC COMO LOCAL Y NO GLOBAL PORQUE ASI ME LO PIDEN EN LA FACULTAD. //===Pasando Vector a funcion====//
  22.     Graba_Fact((struct datosreg **) &inforeg);
  23.     }
  24.  
  25. //===============FIN MAIN==================//
  26.  
  27.  
  28.  
  29.  
  30. //========RESOLUCION DE FUNCION==========//
  31.  
  32. void menu(struct datosreg* con[])
  33. {
  34. //Aca por el momento no tengo nada para evitar posibles errores también.
  35. }
  36.  
  37. void Graba_Fact(struct datosreg* con[])
  38. {
  39. //Aca por el momento no tengo nada para evitar posibles errores también.
  40. }
  41.  
  42. //==============FIN FUNCION=============//

Saludos.
  #5 (permalink)  
Antiguo 23/11/2012, 11:51
 
Fecha de Ingreso: noviembre-2010
Ubicación: Venezuela
Mensajes: 24
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Error al pasar un arreglo Struc a una funcion. Lenguaje C#

Hola pablo, como dijo axel declarastes la funcion Graba_Fact (el prototipo) pero no creastes el cuerpo de la misma, a hora de buscarla el compilador es como si no exisitera.

Etiquetas: compilar, funcion, int, lenguaje, arreglos, variables
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 16:44.