He probado a compilarlo con g++ en vez de con MinGw en code::blocks (windows) y ahora si me da el mismo error que a ti. Ahora supongo que ya se trata de un error del código que he añadido yo. ¿Problema de code::blocks?
Realmente lo dudo mucho pero tampoco sabría decirte ya que no utilizo MinGw.
Lo probé en Visual C++ y el error es exactamente el mismo:
image.cpp(42): error C3848: expression having type 'const ImageColor' would lose some const-volatile qualifiers in order to call 'Pixel &ImageColor::operator ()(int,int)'
Remover el const de la definición y de la declaración de la referencia utilizada "solucionaría" el problema, pero pongo las comillas debido a que si el código te fue entregado de esa manera, habría que analizar el caso para verificar si el const es necesario o no.
Edit:
Mirando un poco el código, el problema radica aquí:
ImageColor::ImageColor(const ImageColor &der)
Tenes un parámetro const, por tanto, implica que no es
modificable.
Ahora bien, en la definición de la sobrecarga de operadores tenes esto:
Pixel& ImageColor::operator()(int row ,int col){
return data[coord2index(row,col)];
}
Lo cual es lo mismo que afirmar que dicha sobrecarga podría ocasionar cierta modificación, algo que obviamente no solo no se hace en la definición si no que no se debería dado el grado de const que tiene la referencia desde cual se lo utiliza en primera instancia. Produciendo así, un error en tiempo de compilación.
La solución, seria garantizar que dicho método no va a modificar un objeto no modificable (niveles de const) declarándolo y definiendo de esta manera:
Pixel& operator()(int row , int col)const;
aunque otra solución seria simplemente no usar una referencia const en primera instancia, pero para eso habría que ver el código en mas profundidad para ver que hacen los otros métodos.
Igualmente te recomendaría que también le plantees la misma pregunta a tus profesores, ya que posiblemente no seas el único con esta duda.
Saludos!