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

Rafael Enriquez Herrador rafenher07 en gmail.com
Sab Dic 26 18:23:26 CET 2009


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.

Mi problema es el siguiente, tengo que hacer un ejercicio cuyo enunciado 
es el siguiente:

/Como ejercicio, debéis crear la clase Matrix. La clase matrix será una 
plantilla. Tendrá los siguientes metodos:
     a) *Constructor vacío*.
     b) *Constructor de copia*.
     c) *Constructor parametrizado*. Recibe dos enteros sin signo, 
número de filas (nRows) y número de columnas (nCols).
     d) *resize(unsigned int nRows, unsigned int nCols)*. Función que 
cambia el tamaño de la matriz. Esta función recibe dos enteros sin signo 
(nRows y nCols). Os aconsejo que no repitais el código y que el 
constructor parametrizado llame a esta función.
     e) *unsigned int getNRows()*. Indica el numero de filas.
     f) *unsigned int getNCols()*. Indica el numero de columnas.
     g) *Type & get(unsigned int r, unsigned int c)*. Función de acceso 
que retorna el elemento (r,c) de la matriz. En este caso, no podremos 
usar el operador []. Llamaremos a esta función. La función comprobará si 
el elemento existe. En caso negativo aborta el programa.
     h) *void setIdentity()*. Esta función hace que la matriz sea la 
identidad, es decir, todo a cero excepto los elementos de la diagonal 
principal que estarán a uno.
     i) *Operador de asignación*.
     j) *Operador de suma*. Realiza la suma de dos matrices y retorna el 
resultado. La función se encargará de comprobar que es posible realizar 
la operación. En caso de no ser posible se abortará el programa.
     k) *Destructor*./

Adjunto se puede encontrar los dos archivos fuente: /matrix.h/ y 
/main.cpp/ que he realizado como solución.

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
matrix.h:90: error: pasar 'const storage::Matrix<float>' como el 
argumento 'this' de 'unsigned int storage::Matrix<Type>::getNCols() 
[with Type = float]' descarta a los calificadores
matrix.h:98: error: pasar 'const storage::Matrix<float>' como el 
argumento 'this' de 'Type& storage::Matrix<Type>::get(unsigned int, 
unsigned int) [with Type = float]' descarta a los calificadores
matrix.h: In member function 'storage::Matrix<Type> 
storage::Matrix<Type>::operator+(const storage::Matrix<Type>&) [with 
Type = float]':
main.cpp:40:   instantiated from here
matrix.h:218: error: pasar 'const storage::Matrix<float>' como el 
argumento 'this' de 'unsigned int storage::Matrix<Type>::getNCols() 
[with Type = float]' descarta a los calificadores
matrix.h:218: error: pasar 'const storage::Matrix<float>' como el 
argumento 'this' de 'unsigned int storage::Matrix<Type>::getNRows() 
[with Type = float]' descarta a los calificadores
matrix.h:224: error: pasar 'const storage::Matrix<float>' como el 
argumento 'this' de 'Type& storage::Matrix<Type>::get(unsigned int, 
unsigned int) [with Type = float]' descarta a los calificadores
matrix.h: In member function 'storage::Matrix<Type>& 
storage::Matrix<Type>::operator=(const storage::Matrix<Type>&) [with 
Type = float]':
main.cpp:40:   instantiated from here
matrix.h:195: error: pasar 'const storage::Matrix<float>' como el 
argumento 'this' de 'unsigned int storage::Matrix<Type>::getNRows() 
[with Type = float]' descarta a los calificadores
matrix.h:196: error: pasar 'const storage::Matrix<float>' como el 
argumento 'this' de 'unsigned int storage::Matrix<Type>::getNCols() 
[with Type = float]' descarta a los calificadores
matrix.h:206: error: pasar 'const storage::Matrix<float>' como el 
argumento 'this' de 'Type& storage::Matrix<Type>::get(unsigned int, 
unsigned int) [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.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091226/57a668d3/attachment.html>
------------ próxima parte ------------
An embedded and charset-unspecified text was scrubbed...
Name: main.cpp
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091226/57a668d3/attachment.ksh>
------------ próxima parte ------------
An embedded and charset-unspecified text was scrubbed...
Name: matrix.h
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091226/57a668d3/attachment.h>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: rafenher07.vcf
Type: text/x-vcard
Size: 175 bytes
Desc: no disponible
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20091226/57a668d3/attachment.vcf>


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