Duplicar posibles:
why isnt it legal to convert (pointer to pointer to non-const) to a (pointer to pointer to a const)qué int no puede ** puede convertir en const int ** en C++
Hola tengo el siguiente código, pero no puedo envolver mi cabeza en torno a por qué esto no funciona - Recibo un error que dice "no puedo convertir de int ** a const int **". Sin embargo, si cambio el primer argumento de printValues para que sea "const int * const * myArray", todo funciona bien. Sé que probablemente no debería usar el de abajo de todos modos, pero no entiendo por qué no compila en absoluto. ¿No puede tener un puntero a un puntero a un entero constante sin declararlo constante en main()?
#include <iostream>
int printValues(const int ** myArray, const long nRows, const long nCols)
{
for (long iRow = 0; iRow < nRows; iRow++)
{
for (long iCol = 0; iCol < nCols; iCol++)
{
std::cout << myArray[iRow][iCol] << " ";
}
std::cout << "\n";
}
return 0;
}
int main()
{
const long nRows = 5;
const long nCols = 8;
int** myArray = new int* [nRows];
for (long iRow = 0; iRow < nRows; iRow++)
{
myArray[iRow] = new int [nCols];
}
for (long iRow = 0; iRow < nRows; iRow++)
{
for (long iCol = 0; iCol < nCols; iCol++)
{
myArray[iRow][iCol] = 1;
}
}
printValues(myArray, nRows, nCols);
return 0;
}
Ver ["¿Por qué me sale un error al convertir un Foo ** → Foo const **?"] (Http://www.parashift.com/c++faq-lite/const-correctness.html#faq- 18.17) –
Porque realmente le permite violar la corrección de const. Trataré de encontrar el dup. –
Nunca me di cuenta de que esta era una pregunta tan popular, de todas las respuestas que he visto siento que [la de estándar] (http://stackoverflow.com/a/29240053/1708801) es la mejor. –