/ / Retour d'une matrice avec des valeurs constantes en c ++ - c ++, tableaux, pointeurs

Retour d'une matrice avec des valeurs constantes en c ++ - c ++, tableaux, pointeurs

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 № 1

La 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.