【问题标题】:Nested templates and static member initialization嵌套模板和静态成员初始化
【发布时间】:2011-06-27 09:18:37
【问题描述】:

我想创建一个依赖于外部类的内部模板类。 我无法定义其静态成员:

template<typename T1, typename T2>
struct B { 
  template<typename T3> 
  struct C { 
      static T3 m_c;
  }; 
  static T1 * pT1;
};
template<typename T1, typename T2>
template<typename T3>
T3 B<T1,T2>::C<T3>::m_c;

template<typename T1, typename T2> 
T1 * B<T1,T2>::pT1 = &B<T1,T2>::C<T2>::m_c;

我得到: a.cc:35:错误:“>”标记之前的预期主表达式 a.cc:35:错误:'::m_c' 尚未声明

我如何定义它? 谢谢。

【问题讨论】:

  • 对我来说看起来还不错。你用的是什么编译器?
  • 代码使用VC9、VC10和Comeau Online编译干净。
  • 抱歉,当我发布代码时,代码已经堆积如山了。现在有正确的代码了。
  • 它对我来说仍然编译得很好。我刚刚在 5 种不同的编译器上对其进行了测试:borland、vc10、mingw-gcc-4.5.2、digital mars c++ 和 Clang。您正在使用什么编译器正在拒绝该代码?

标签: c++ templates


【解决方案1】:

我猜您的编译器无法将 &lt; 符号解析为模板声明的左括号。尝试明确告诉它它是一个模板,而不是小于运算符:

template<typename T3>
T3 B<T1,T2>::template C<T3>::m_c;

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多