2010-09-15 49 views
6

Ngay bây giờ tôi có một lớp A thừa kế từ lớp BB không có hàm tạo mặc định. Tôi đang cố gắng tạo ra một constructor cho A có các thông số chính xác tương tự cho constructor B 's, nhưng tôi nhận được:Lớp được thừa kế từ lớp không có hàm tạo mặc định

error: no matching function for call to ‘B::B()’ 
note: candidates are: B::B(int) 

Làm thế nào tôi khắc phục lỗi này?

+0

Vui lòng đăng mã hiện tại của bạn –

+0

@Ramon Zarazua - tại sao? Tôi đã nhận được câu trả lời ... – wrongusername

Trả lời

14

Các nhà xây dựng nên giống như thế này:

A(int i) : B(i) {} 

Các bit sau dấu hai chấm có nghĩa là "khởi tạo cơ sở B đối tượng lớp phụ của đối tượng này sử dụng constructor int của nó, với giá trị i".

Tôi đoán rằng bạn không cung cấp bộ khởi tạo cho B, và do đó theo mặc định, trình biên dịch sẽ cố gắng khởi tạo nó bằng hàm tạo không có dấu (arg) không tồn tại.

+0

Cảm ơn bạn đã giải thích điều đó có nghĩa là gì, Steve! Tôi không nhận ra có một bộ khởi tạo – wrongusername

2

Bạn cần gọi hàm tạo cơ sở thông qua danh sách trình khởi tạo lớp của bạn.

Ví dụ:

class C : public B 
{ 
public: 
    C(int x) : B(x) 
    { 
    } 

}; 

Khi bạn không khởi B một cách rõ ràng nó sẽ cố gắng sử dụng các constructor mặc định mà không có thông số.

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