Salut,
Il n'y a pas d'erreurs plus explicites qu'un simple numéro ? Pour savoir à quoi correspond l'erreur il faut déjà savoir quel est le compilateur. Mais je crois qu'il n'y a que visual studio pour mettre des numéros...
Pour la première erreur: tu ne peux pas retourner de tableau. Un référence sur un tableau oui. Mais tu ne peux pas initialiser un tableau avec le retour d'une fonction.
Soit il faut changer all_mouv pour prendre une référence sur un tableau pour l'initialiser.
void all_mouv(int x, int y, ??? table, int (&pieces)[30][4]);
Soit passer par une structure qui contient le tableau (voir std::array ou boost::array) qui s'occupera de faire une copie.
std::array<int[4], 30> all_mouv(int x, int y, ??? table);
La seconde erreur vient tu fais qu'1/ la fonction ne retourne pas un tableau à 2 dimensions (*) 2/ que la fonction retournes un tableau local à une fonction (en fait juste son adresse) et le tableau n'existe plus à la sortie de la fonction.
Voir allocation dynamique, std::vecteur ou std::array/boost::array (mieux ici).
Par contre, la fonction bouger ne fait pas ce qu'elle dit. Les valeurs ne changent pas, elles sont copier (2 fois) et modifier (donc 2 choses), les copies sont de trop.
Perso j'aurais envoyer table par référence pour que bouger() le modifie. S'il y a besoin d'une copie, je l'aurait mit avant l'appel à la fonction. En passant par std::array, la copie ne fait qu'une ligne (table_copie = table).
J'aurais aussi envoyer 4 valeurs plutôt qu'un tableau mouv. Mais question de préférence j'imagine.
Regarde ce qu'est une référence, je pense qu'il te manque cette notion ; ça te permettras de simplifier ton code. Regarde aussi les principes du const-correctness, ça ne peux pas faire de mal ^^.
* un float** ne peux être un tableau 2D. C'est au mieux un tableau de pointeur sur float. (même si tableau n'est pas approprier dans ce cas de figure). Pour bien le comprendre il faut faire une représentation de la mémoire. J'ai pour le moment la flemme de sortir mes crayons de couleurs ^^.
Partager