Ai đó có thể giải thích tại sao tôi nhận được lỗi biên dịch ở đây - lỗi C2558: class 'std :: auto_ptr < _Ty>': không có hàm tạo bản sao nào bị tuyên bố 'rõ ràng'Không có hàm tạo bản sao nào có sẵn hoặc hàm tạo bản sao được khai báo 'rõ ràng'
#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;
}
Đã lâu rồi kể từ khi tôi đã thực hiện C++, nhưng không nên là 'g = test (" d ");'? –
@ Jesse J: Cả hai đều ổn. Hai cách có hành vi hơi khác nhau mà trong tất cả, nhưng các trường hợp xấu nhất cho kết quả tương tự. Về mặt kỹ thuật, phương thức của bạn sẽ tạo ra một lớp thử nghiệm, sau đó gán nó cho g, thay vì chỉ khởi tạo g chính nó. Điều này chỉ trở thành một vấn đề khi bạn có các hành vi copy/assign/init tùy chỉnh. – Akusete
Cảm ơn tất cả các bạn. Câu trả lời thực sự mang tính thông tin. – Carl