2008-11-11 28 views

Trả lời

18

Bạn cần phải đặt typename trước dòng đó, kể từ khi loại bạn làm :: iterator khi phụ thuộc vào mẫu tham số T. Như thế này:

template< class T > 
void example() { 
    typename std::list< boost::function<T()> >::iterator it; 
} 

Hãy xem xét các dòng

std::list< boost::function<T()> >::iterator * it; 

có thể có nghĩa là phép nhân hoặc con trỏ. Đó là lý do tại sao bạn cần typename để làm cho ý định của bạn rõ ràng. Không có nó, trình biên dịch giả định không phải là một kiểu, và do đó nó yêu cầu một toán tử ở đó hoặc một dấu chấm phẩy.


Đồng thời tham khảo mục C++ FAQ mới Where to put template and typename on dependent names.

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