Código
#include <iostream> #include <string> using namespace std; class CTest { private: int a; public: CTest() : a(0) {} CTest(int d) : a(d) {} // CTest(const CTest& obj) { // cout << "constructor copia invocado"; // *this = obj; // } CTest(CTest& obj) { cout << "constructor copia sin const invocado"; *this = obj; } CTest& operator=(const CTest& obj) { a = obj.a; cout << "operator= invocado"; return *this; } int getA() { return this->a; } }; int main() { CTest miObj = CTest(); ///////////////// AQUÍ ESTÁ EL ERROR cout << miObj.getA() << endl; return 0; }
El error:
../src/OtroCpp.cpp:36: error: no matching function for call to 'CTest::CTest(CTest)'
Según leo en el libro que estoy estudiando:
CTest miObj = CTest()
Es equivalente a
CTest miObj;
Ahora bien, si veis mi código, no funciona por culpa de poner el constructor copia con el parámetro no const, pero si quito los comentarios del constructor copia con const (el que implementa C++ por omisión) entonces funciona.
¿Por qué?
Y lo que me parece más raro todavía, es que al depurar el código y seguir instrucción a instrucción, veo que no llega a entrar en ningún momento en el constructor copia (en ninguno de los dos) y que se ejecuta directamente el constructor sin parámetros.
Al poner CTest miObj = CTest() se llama al constructor copia? o no... pensando un poquito sobre el tema puedo entender con mis escasos conocimientos, que Ctest() crea un objeto sin nombre y lo copia a MiObj invocando al constructor copia, pero es que según mi depurador no es así.
En fin... ¿qué no soy capaz de ver/entender?
Gracias chic@s