¿Puede alguno de ustedes explicar por qué no se compila el siguiente fragmento de código?Error al tener un copiador privado con el operador de asignación pública
#include <iostream>
using namespace std;
class Foo
{
public:
Foo() { cout << "Foo::Foo()" << endl << endl; }
Foo& operator=(const Foo&) { cout << "Foo::operator=(const Foo&)" << endl << endl; }
private:
Foo(const Foo& b) { *this = b; cout << "Foo::Foo(const Foo&)" << endl << endl; }
};
int main()
{
Foo foo;
foo = Foo();
}
El error que recibe:
$ g++ -o copy_ctor_assign copy_ctor_assign.cc && ./copy_ctor_assign
copy_ctor_assign.cc: In function 'int main()':
copy_ctor_assign.cc:10: error: 'Foo::Foo(const Foo&)' is private
copy_ctor_assign.cc:17: error: within this context
Nota: cuando quito la privada: palabra clave del código se compila pero el ctor copia nunca es llamado. Entonces, ¿por qué se equivoca cuando es privado?
No estoy seguro de si es importante, pero estoy usando:
$ g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44)
Copyright (C) 2006 Free Software Foundation, Inc.
FWIW: El código hace co mpile si asigna un objeto Foo creado previamente en lugar de un objeto temporal. Es decir. 'foo = bar;' en lugar de 'foo = Foo();'. – sepp2k