Qualcuno potrebbe spiegare perché sto ricevendo un errore di compilazione qui - errore C2558: classe 'std :: auto_ptr < _Ty>': nessun costruttore di copia disponibile o costruttore di copia è dichiarata 'esplicito'Nessun costruttore di copia disponibile o costruttore di copie dichiarato 'esplicito'
#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;
}
È passato un po 'di tempo da quando ho eseguito C++, ma non dovrebbe essere 'g = test (" d ");'? –
@Jesse J: Entrambi sono ok. I due modi hanno un comportamento leggermente diverso che in tutti tranne i casi più diabolici danno lo stesso risultato. Tecnicamente il tuo metodo creerà una classe di test e poi la assegnerà a g, piuttosto che solo inizializzare g stesso. Questo diventa un problema solo quando si hanno comportamenti personalizzati di copia/assegnazione/init. – Akusete
Grazie a tutti. Risposte davvero istruttive – Carl