2012-08-28 35 views
7

Tôi gặp vấn đề với sự phụ thuộc vòng tròn trong một lớp templated. Có một mẫu mã:C++ - phụ thuộc vòng tròn (sử dụng loại bên trong của phân lớp trong lớp cơ sở templated)

template <typename T> struct A 
{ 
    typedef typename T::C D; 
    //typename T::C c; 
}; 

struct B : public A<B> 
{ 
    struct C {}; 
}; 

Khi tôi cố gắng để nhanh chóng B, tôi nhận được một lỗi biên dịch: 'C' là không phải là một thành viên của 'B' (MSVC) hoặc sử dụng không hợp lệ của loại không đầy đủ ' struct B ' (GCC).
Cách tốt nhất để thay đổi mẫu để làm cho nó hoạt động là gì?

+3

Bạn không thể. Cung cấp ví dụ hoàn chỉnh hơn một chút về vấn đề bạn đang cố gắng giải quyết và chúng tôi có thể xem xét việc tái cấu trúc mã. –

Trả lời

6
struct B_base { struct C {}; }; 
strucr B : A<B_base>, B_base { }; 
+0

Có thể không hữu ích nếu 'A' là một mẫu CRTP đặt kiểu tham số' T' trong khai báo thành viên. Trong trường hợp đó, bạn có thể chỉ cần tạo 'C' một tham số mẫu bổ sung. – aschepler

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