Quelqu'un pourrait-il expliquer pourquoi j'obtiens une erreur de compilation ici - erreur C2558: class 'std :: auto_ptr < _Ty>': aucun constructeur de copie disponible ou constructeur de copie est déclarée 'explicite'Aucun constructeur de copie disponible ou constructeur de copie n'est déclaré 'explicite'
#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;
}
Ça fait longtemps que je n'ai pas fait de C++, mais ça ne devrait pas être 'g = test (" d ");'? –
@Jesse J: Les deux sont ok. Les deux voies ont un comportement légèrement différent qui, dans tous les cas sauf les plus diaboliques, donne le même résultat. Techniquement, votre méthode créera une classe de test, puis l'assignera à g, plutôt que d'initialiser g elle-même. Cela devient seulement un problème lorsque vous avez des comportements de copie/affectation/init personnalisés. – Akusete
Merci à tous. Des réponses vraiment informatives. – Carl