Bạn có thể giải thích tại sao đoạn mã sau đây không biên dịch không?Lỗi khi có ctor sao chép riêng với toán tử gán công khai
#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();
}
Các lỗi tôi nhận được:
$ 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
Lưu ý: khi tôi loại bỏ các tin: từ khóa mã biên dịch nhưng ctor bản sao không bao giờ được gọi. Vậy tại sao nó sai khi nó riêng tư?
Không chắc chắn nếu điều quan trọng nhưng tôi đang sử dụng:
$ g++ --version
g++ (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44)
Copyright (C) 2006 Free Software Foundation, Inc.
FWIW: Mã không đồng mpile nếu bạn gán một đối tượng Foo được tạo trước đó thay vì một đối tượng tạm thời. I E. 'foo = bar;' thay vì 'foo = Foo();'. – sepp2k