[C con Clase] Problema creacion de clase matriz con plantilla en C++

Rafael Enriquez Herrador rafenher07 en gmail.com
Dom Dic 27 18:47:43 CET 2009


Muchas gracias por vuestra ayuda. Voy a probar a realizar las 
modificaciones y ya comento.

Un saludo.

El 26/12/09 20:59, Programante escribió:
> Rafael Enriquez Herrador escribió:
>    
>> Hola a tod en s,
>>
>> Esta es la primera vez que escribo a la lista, por lo tanto me
>> gustaría dar la enhorabuena a todos aquellos/as que intervienen en
>> ella de cualquier forma.
>>      
> Hola Rafael, bienvenido a la lista.
> Da gusto encontrarse con alguien que tiene que hacer un ejercicio y en
> vez de esperar que se lo hagamos por la cara, lo ha hecho él solito y
> sólo pregunta los problemas que le surgen :)
>
>    
>> El problema es que al compilar me da el siguiente error:
>>
>> /$ g++ -I. -g3 main.cpp -o matrix
>>
>> In file included from main.cpp:8:
>> matrix.h: In copy constructor ‘storage::Matrix<Type>::Matrix(const
>> storage::Matrix<Type>&) [with Type = float]’:
>> main.cpp:34:   instantiated from here
>> matrix.h:89: error: pasar ‘const storage::Matrix<float>’ como el
>> argumento ‘this’ de ‘unsigned int storage::Matrix<Type>::getNRows()
>> [with Type = float]’ descarta a los calificadores
>> (....)/
>> La verdad es que estoy totalmente bloqueado ya que soy nuevo en esto
>> de la programación de clases con plantillas en C++. Agradecería
>> muchísimo si alguien pudiese orientarme de dónde puede estar el fallo
>> y a que puede deberse.
>>
>> Un saludo y muchas gracias por adelantado.
>>      
> Tu problema es que tienes código como este (quito la template para mayor
> claridad, pues no afecta al problema):
>
> Matrix::Matrix(const Matrix&M){
>
> 	_nRows = M.getNRows();
> 	_nCols = M.getNCols();
>
> }
>
> Estás pasando M como una matriz constante, pero los métodos getNRows() y
> getNCols() no son constantes. En lo que respecta al compilador, podrían
> estar modificando la matriz (imáginate que se llamara
> poner_a_cero_y_devolver_numero_de_filas() ).
>
> Tienes definidos estos métodos como:
>
> 	/**Gets the number of rows
> 	 */
> 	inline unsigned int getNRows();
>
> 	/**Gets the number of columns
> 	 */
> 	inline unsigned int getNCols();
>
> Para indicar al compilador que estos métodos no modifican la matriz
> (decirle que el this es const dentro de esa función) tienes que añadir
> const al final. Así:
>
> 	/**Gets the number of rows
> 	 */
> 	inline unsigned int getNRows() const;
>
> 	/**Gets the number of columns
> 	 */
> 	inline unsigned int getNCols() const;
>
>
> Con este cambio no debería darte más fallos. Aparte de getNRows() y
> getNCols() tienes también que arreglar get() y, aunque no te está dando
> ningún error, conceptualmente creo que
>
> debería añadirse también al operator+
>
>
> Felices Navidades a todos
>
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

-- 
----------------------------
Rafael Enríquez Herrador
----------------------------

------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: rafenher07.vcf
Type: text/x-vcard
Size: 182 bytes
Desc: no disponible
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091227/1dba4680/attachment.vcf>


Más información sobre la lista de distribución Cconclase