[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