2010-09-11 35 views
7

Điều gì sai với đoạn mã sau đây?Lỗi trình biên dịch khi sử dụng số nguyên làm tham số mẫu

template<typename X> 
struct A { 
     template<int N> 
     int foo() const { 
       return N; 
     } 
}; 

template<typename X> 
struct B { 
     int bar(const A<X>& v) { 
       return v.foo<13>(); 
     } 
}; 

#include <iostream> 
using std::cout; 
using std::endl; 

int main() { 
     A<double> a; 
     B<double> b; 
     cout << b.bar(a) << endl; 
     return 0; 
} 

Bên trong chức năng B::bar trình biên dịch phàn nàn:

error: invalid operands of types ‘’ and ‘int’ to binary ‘operator<’

Nếu A không phải là một mẫu, tất cả mọi thứ biên dịch tốt.

+2

có thể trùng lặp với cú pháp mẫu [C++] (http://stackoverflow.com/questions/3621719/c-template-syntax) –

Trả lời

14

Thay đổi return v.foo<13>(); thành return v.template foo<13>();foo là tên phụ thuộc và bạn cần đề cập rõ ràng khi sử dụng cấu trúc .template.

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