2013-10-24 12 views
17

Tôi có lớpConstructor cho '' phải khởi tạo một cách rõ ràng các thành viên tham khảo ''

class CamFeed { 
public: 
    // constructor 
    CamFeed(ofVideoGrabber &cam); 
    ofVideoGrabber &cam; 

}; 

này Và constructor này:

CamFeed::CamFeed(ofVideoGrabber &cam) { 
    this->cam = cam; 
} 

tôi nhận được lỗi này trên các nhà xây dựng: Constructor cho ' 'phải khởi tạo rõ ràng thành viên tham chiếu' '

Cách tốt nhất để giải quyết vấn đề này là gì?

+2

Bạn phải khởi tạo tham chiếu ngay lập tức vì nó không thể rỗng như ptr – aaronman

+6

Hãy suy nghĩ cẩn thận về dòng mã này có nghĩa gì, nó không phải là suy nghĩ của bạn: 'this-> cam = cam; ' tham chiếu. Nó sẽ gọi 'operator =' trên 'this-> cam' - chưa được khởi tạo. –

Trả lời

29

Bạn cần phải sử dụng các nhà xây dựng danh sách initializer:

CamFeed::CamFeed(ofVideoGrabber& cam) : cam(cam) {} 

Điều này là do tài liệu tham khảo phải đề cập đến một cái gì đó và do đó không thể được mặc định xây dựng. Khi bạn ở trong phần thân hàm dựng, tất cả các thành viên dữ liệu của bạn đã được khởi tạo. Dòng this->cam = cam; của bạn thực sự sẽ là một bài tập, gán giá trị được tham chiếu bởi cam cho bất kỳ số nào this->cam đề cập đến.

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