Comment puis-je retourner un tableau 2D de valeurs constantes à partir d'une fonction? J'ai besoin de retourner quelque chose comme ça:
//I don"t even know if this is the best way to do 2d arrays in c++.
const int matrix[4][2] = {
{10,11},
{12,13},
{14,15},
{16,17}
};
Voici ce que j'ai essayé:
#include <iostream>
using namespace std;
int** createMatrix();
int main(){
int **m = createMatrix();
return 0;
}
const int** createMatrix(){
const int **matrix = new const int*[4];
matrix[0] = new const int[2] = {10,11};
matrix[1] = new const int[2] = {12,13};
matrix[2] = new const int[2] = {14,15};
matrix[3] = new const int[2] = {16,17};
return matrix;
}
Le résultat obtenu:
main.cpp: dans la fonction 'const int ** createMatrix ()': main.cpp: 12: 13: erreur: nouvelle déclaration ambiguë de 'const int ** createMatrix ()' const int ** createMatrix () { ^ ~~~~~~~~~~~~
main.cpp: 5: 7: remarque: ancienne déclaration 'int ** createMatrix ()' int ** createMatrix (); ^ ~~~~~~~~~~~~
main.cpp: 15: 29: erreur: const non initialisé dans ‘nouveau’ de ‘const int’ matrice [0] = nouvelle constante int [2] = {10,11}; ^
main.cpp: 16: 29: erreur: const non initialisé dans ‘nouveau’ de ‘const int’ matrice [1] = nouvelle constante int [2] = {12,13}; ^
main.cpp: 17: 29: erreur: const non initialisé dans ‘nouveau’ de ‘const int’ matrice [2] = nouvelle constante int [2] = {14,15}; ^
main.cpp: 18: 29: erreur: const non initialisé dans ‘nouveau’ de ‘const int’ matrice [3] = new const int [2] = {16,17};
Réponses:
0 pour la réponse № 1La déclaration de fonction et la définition de fonction ont des types de retour différents.
int** createMatrix();
et
const int** createMatrix(){
Aussi une telle initialisation comme ça
matrix[0] = new const int[2] = {10,11};
est incorrect.
Il semble que tu veux dire ce qui suit
#include <iostream>
const int** createMatrix();
int main()
{
const int **m = createMatrix();
return 0;
}
const int ** createMatrix()
{
const int **matrix = new const int*[4];
matrix[0] = new const int[2] {10,11};
matrix[1] = new const int[2] {12,13};
matrix[2] = new const int[2] {14,15};
matrix[3] = new const int[2] {16,17};
return matrix;
}
2 pour la réponse № 2
La solution simple consiste à créer un tableau de tableaux, comme vous le montrez en premier, et à le renvoyer.
Fais-le static
à l'intérieur de la fonction pour que sa durée de vie ne se termine pas. Et rappelez-vous de renvoyer le type correct (un tableau de tableaux n'est pas la même chose qu'un pointeur sur un pointeur).
Éventuellement utiliser std::array
au lieu de simples tableaux de style C.
Si la taille est configurable au moment de l'exécution, utilisez std::vector
.
0 pour la réponse № 3
Vous devriez envisager de l'enregistrer sous la forme d'un tableau 1d de longueur (xsize * ysize), ce qui est apparemment meilleur que l'enregistrement de tableaux 2D.