2012-08-30 33 views
5

Tôi nhận được một vòng lặp mà trong đó tôi sử dụng một hàm trả về std :: unique_ptr cho một đối tượng của một lớp trừu tượng. Tôi muốn lưu trữ các đối tượng này vào một std :: vector thông qua push_back. Nhưng kể từ khi đối tượng thuộc loại trừu tượng tôi nhận được lỗi sau:Làm thế nào để lưu trữ một vector của các đối tượng của một lớp trừu tượng được đưa ra bởi std :: unique_ptr?

error: cannot allocate an object of abstract type 

cho dòng

cells.push_back(std::move(*cell)); 

nơi các tế bào là một std::vector loại trừu tượng và cell là loại

std::unique_ptr<AbstractType>&& cell 

(Tôi thực sự vượt qua cell đến lớp xử lý) Tôi biết rằng người ta không thể khởi tạo một loại trừu tượng và như tôi 'm hiểu biết std: di chuyển nhà điều hành nó cần phải nhanh chóng đối tượng bằng cách nào đó?

Ai đó có thể giúp tôi cách quản lý sự cố không? Hoặc nên các chức năng (không phải là một phần của dự án) không trả về một con trỏ duy nhất cho một đối tượng của một loại trừu tượng?

+6

Chúng ta đang nói về 'vector '? Điều đó sẽ không hoạt động. Lưu trữ một 'vector >' thay thế. –

+0

Bạn đã đúng! Tôi đã bị mù, tôi đã thay đổi nó thành 'vector >' và bây giờ nó hoạt động – soriak

+0

@ R.MartinhoFernandes: +1 trên bình luận của bạn (đó phải là câu trả lời). Bạn phải đọc suy nghĩ! –

Trả lời

9

Bạn không thể lưu trữ AbstractType phần tử trực tiếp trên std::vector. Bạn chỉ có thể tự mình lưu trữ unique_ptr trong một số std::vector<std::unique_ptr<AbstractType>> với cells.push_back(std::move(cell)).

+0

Lý do là bạn đang gọi hàm tạo bản sao và do đó cố gắng khởi tạo một lớp trừu tượng. –

Các vấn đề liên quan