pasar una matriz a una funcion (C++)

hola a todos, a ver si alguien arroja algo de luz sobre mi fallo

hace mucho que no programo y no estoy en forma xD

tengo 3 ficheros

el lib1.cc el lib1.h y el p1.cc

en el lib 1.cc tengo implementada esta funcion:

void RellenarTablero(char &tablero[])

y en el lib1.h la defino igual:

void RellenarTablero(char &tablero[])

en el p1.cc

declaro char tablero[KTAM][KTAM];

y luego lo paso a la funcion asi:

RellenarTablero(tablero);

y el compilador me dice:

lib1j.h:22: error: redeclaración de ‘tablero’ como array of references
p1j.cc: In function ‘int main()’:
lib1j.h:22: error: demasiados argumentos para function ‘void ImprimirTablero()’
p1j.cc:10: error: en este punto en el fichero
make: *** [p1j.o] Error 1

la verdad que no se donde esta el fallo, a ver si alguien me hecha una manilla


salu2 y gracias
podrias copiar el programa directamente como lo tienes en el compilador?
Así es imposible ayudarte.

Fijate que el compilador te dice que has declarado 2 veces tablero.
Luego has debido declarar void ImprimirTablero() como función sin argumentos y le intentas pasar alguno (o más de los declarados).

¿Estás compilando los ficheros adecuados? Porque El nombre no corresponde con el que comentas.
Mmm... yo probaria a cambiar

void RellenarTablero(char &tablero[])

por

void RellenarTablero(char *tablero)
Vamos a ver, en la cabecera de la función tienes que poner el mismo tipo que sea el tablero, si tablero es un char * tablero[] pues en la cabecera de la función tienes que poner lo mismo, además que eso de char & tablero[] no existe.
Waninkoko escribió:Mmm... yo probaria a cambiar

void RellenarTablero(char &tablero[])

por

void RellenarTablero(char *tablero)


Yo voto por:

void RellenarTablero(char **tablero)

Dos * por que es una matriz (dos dimensiones), ademas de añadir por lo menos una variable que de la longitud del mismo (a no ser que la conozcas)

Salu2!
Las ** es para hacer referencia a una matriz de punteros, no tiene nada que ver con el caso actual. Lo correcto sería void RellenarTablero(char * Tablero).

Con lo que quedaría así cuando se llama a la función:
RellenarTablero(tablero);


Pero recuerda que una vez la pasas a la funcion. esta "pierde" su "identidad" (Vamos, no podras acceder a ella como si se tratase de una matriz de dos dimensiones). Por lo tanto, una vez la has pasado a RellenarTablero, asi que para acceder a un vector especifico en coordenadas de dos dimensiones, debes usar lo siguiente:

Tablero[x*AnchoMatriz+y] = Tal;

Y ya está :e
6 respuestas