2012-03-14 150 views
6
struct Messages 
{ 
     template <typename V> 
     static const char* message() {return "test mesage";} 
}; 

template <int Min, class M=Messages> 
struct Test: public M 
{ 
    Test() 
    { 
     M::message<int>(); //error: expected primary-expression before 'int' 
    } 
}; 

int main() 
{ 
    Test<5, Messages> t; 
} 

衍生我怀疑这跟一些相互依存,就像测试的代码取决于基M级,其方法是内部专业模板类的模板方法测试。它是否正确?为什么我不能调用从

回答

7

M::message是从属名称,因为M是模板参数。编译器无法知道一个从属名称本身就是一个模板,因此,你需要明确指定这一点:

M::template message<int>(); 

否则编译器解析的代码,就好像M::message是一个值,该值以下尖括号不同的含义(即它们被解析为小于和大于运算符,而不是作为模板列表分隔符)。编译器无法从这种错误的解析中恢复。

+0

谢谢,就是这样。我不知道使用'template'关键字来消除依赖名称的歧义。 – 2012-03-14 15:54:06

相关问题