Come posso restituire un array 2d di valori costanti da una funzione? Devo restituire qualcosa del genere:
//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}
};
Ecco cosa ho provato:
#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;
}
L'output che ho ottenuto:
main.cpp: nella funzione 'const int ** createMatrix ()': main.cpp: 12: 13: errore: ambiguating nuova dichiarazione di 'const int ** createMatrix ()' const int ** createMatrix () { ^ ~~~~~~~~~~~
main.cpp: 5: 7: nota: vecchia dichiarazione 'int ** createMatrix ()' int ** createMatrix (); ^ ~~~~~~~~~~~
main.cpp: 15: 29: errore: const non inizializzato in 'new' di 'const int' matrix [0] = new const int [2] = {10,11}; ^
main.cpp: 16: 29: errore: const non inizializzato in 'new' di 'const int' matrice [1] = new const int [2] = {12,13}; ^
main.cpp: 17: 29: errore: const non inizializzato in 'new' di 'const int' matrice [2] = new const int [2] = {14,15}; ^
main.cpp: 18: 29: errore: const non inizializzato in 'new' di 'const int' matrice [3] = new const int [2] = {16,17};
risposte:
0 per risposta № 1La dichiarazione della funzione e la definizione della funzione hanno diversi tipi di ritorno.
int** createMatrix();
e
const int** createMatrix(){
Anche una tale inizializzazione come questa
matrix[0] = new const int[2] = {10,11};
non è corretto.
Sembra che tu intenda il seguente
#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 per risposta № 2
La soluzione semplice consiste nel creare una serie di array, come ad esempio il tuo primo spettacolo, e restituirlo.
Fallo static
all'interno della funzione in modo che la sua durata non finisca. E ricorda di restituire il tipo corretto (una matrice di matrici non è la stessa di un puntatore a un puntatore).
Opzionalmente usare std::array
invece di semplici array in stile C.
Se la dimensione è configurabile in fase di esecuzione, utilizzare std::vector
.
0 per risposta № 3
Si dovrebbe considerare di salvarlo come un array di lunghezza 1d (xsize * ysize) questo è, presumibilmente, meglio del salvataggio di array 2d.