Podría alguien explicar por qué me sale un error de compilación aquí - error C2558: clase 'std :: auto_ptr < _Ty>': no hay copia de constructor disponible o copia constructor se declara 'explícito'Ningún constructor de copia disponible o el constructor de copia se declara 'explícito'
#include <memory>
#include <vector>
#include <string>
template<typename T>
struct test
{
typedef std::auto_ptr<T> dataptr;
typedef std::auto_ptr< test<T> > testptr;
test(const T& data):
data_(new T(data))
{
};
void add_other(const T& other)
{
others_.push_back(testptr(new test(other)));
}
private:
dataptr data_;
std::vector<testptr> others_;
};
int main(int argc, char* argv[])
{
test<std::string> g("d");
//this is the line that causes the error.
g.add_other("d");
return 0;
}
Ha pasado un tiempo desde que hice C++, pero ¿no debería ser 'g = prueba (" d ");'? –
@Jesse J: Ambos están bien. Las dos formas tienen un comportamiento ligeramente diferente que en todos los casos menos diabólicos dan el mismo resultado. Técnicamente, su método creará una clase de prueba y luego la asignará a g, en lugar de simplemente inicializar g. Esto solo se convierte en un problema cuando tiene comportamientos personalizados de copia/asignación/inicio. – Akusete
Gracias a todos. Respuestas realmente informativas. – Carl