SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: Ozonek en Domingo 15 de Diciembre de 2002, 02:47
-
Hola a todos. Resulta que a modo de boceto tengo un programa que le pasa a
una funcion un array multidimensional. Un esquema seria el siguiente:
void dibujar_ahorcado(char buffer[][6]); // Prototipo de la funcion que lo recibe
........
........
// Dentro de una funcion llamada control (que recibe un array como parametro), declaro el array que quiero pasar
y luego llamo a la funcion tres veces:
char buffer[4][6];
.....
dibujar_ahorcado(buffer); //Esto lo hago 3 veces a lo largo de la funcion
//Por ultimo la definicion de la funcion:
void dibujar_ahorcado(char buffer[][6]){
...... // Codigo para que dibuje y demas.
}
Pues bueno resulta que el compilador no detecta errores (DEVC++) pero me
sale la ventanita del compilador y el linker diciendome:
C:DOCUME~1OzonekCONFIG~1TempccO2caaa.o: In function `control(char *)':
//c/docume~1/ozonek/escrit~1/native~1/ahorca~3.cpp:191: undefined reference
to `dibujar_ahorcado(char (*)[5])'
//c/docume~1/ozonek/escrit~1/native~1/ahorca~3.cpp:199: undefined reference
to `dibujar_ahorcado(char (*)[5])'
Y es que me estoy volviendo loco por que si no llamo a esa funcion el
prograam funciona perfectamente, y cuando la llamo me sale eso (son las
lineas de las llamadas). No tengo ni idea de que quiere decir eso. Hay algo
no definido?? Alguien puede ayudarme??
-
Disculpa, necesito mas especificacion del programa, y tal ves te pueda ayudar,por que no lo mandas, o bien cambia a Turbo C++, es mas sencillo
-
Saludos Ozonek:
Tengo la Impresion de que el prototipo de la funcion es incorrecto ya que buffer es un arreglo de punteros y el prototipo debe ser:
void dibujar_ahorcado(char *buffer[]);
ó
void dibujar_ahorcado(char **buffer);
Las dos declaraciones indican lo mismo que: buffer es un puntero a un arreglo de punteros.
de tal forma que:
si el programa es :
...
char buffer[4][6];
/***
Se Cargan Los 4 Elementos de la
matriz con maximo 5 caracteres c/u
***************************/
strcpy(buffer[0], "Ele_1");
strcpy(buffer[1], "Ele_2");
strcpy(buffer[2], "Ele_3");
strcpy(buffer[3], "Ele_1");
...
/***
Pasar buffer como parametro
**********************/
dibujar_ahorcado(buffer);
...
/***
Sigue la Funcion Principal...
*********************/
/**************************
Cuerpo de dibujar_ahorcado(char **B_uffer);
Parametro: Puntero al Arreglo de
Punteros. debes controlar que la
funcion no exeda los limites definidos
cuando declaraste buffer. es decir
B_uffer va a apuntar a una matrix
de 4 Elementos que apuntan a un
arreglo de 6 elementos cada uno.
**************************/
void dibujar_ahorcado(char **B_uffer)
{
/***
Si Por Ejemplo quiero imprimir el
caracter almacenado en el primer
elemento del Primer Arreglo:
**** *********************/
putchar(B_uffer[0][0]); // Imprimira E
putchar(B_uffer[0][1]); // Imprimira l
putchar(B_uffer[0][2]); // Imprimira e
putchar(B_uffer[0][3]); // Imprimira _
putchar(B_uffer[0][4]); // Imprimira 1
/***
B_uffer[0][5]) // contendra /0 = 0
**************************/
/***
y de esta manera podras accesar cada uno de los elementos de la matriz. Debes tomar en cuenta que el primer elemento de la matriz es el B_uffer[0][0] y el Ultimo
es el B_uffer[3][5] Por que esto no lo controla el C.
Si Utilizas Por ejemplo el elemento B_uffer[100][10] el programa compilara bien, pero dara un error en tiempo de ejecución que dependera del compilador y del sistema operativo que este Usando por que habra una violacion del area de memoria que destinaste al declarar el arreglo.
Esperando te sirva la información
Saludos:
Bench.
http://www.BenchSQL.com/ (http://www.BenchSQL.com/)
Prototipo de la funcion que lo recibe
........
........
// Dentro de una funcion llamada control (que recibe un array como parametro), declaro el array que quiero pasar
y luego llamo a la funcion tres veces:
char buffer[4][6];