0

我有一个类模板,它在其中定义了一个类型:

#include <boost/array.hpp>

template <typename T, int N>
class MyFunct {
public:
  typedef boost::array<T,N> FArray;
  MyFunct();
};

现在我有另一个类模板。这个类的特殊之处在于它应该只适用于在它们内部定义了一个名为FArray. 请不要问为什么,这是有原因的。

template <typename F>
class MyClass {
public:
  MyClass() {
    F::FArray a = F::FArray();
  }
};

我用这个:

int main(int argc, char** argv) {
  MyClass< MyFunct<double,10> > m;
}

当我遇到这种情况时,编译器会生气地告诉我double没有被调用的成员FArray。发生了什么?

4

2 回答 2

2

你需要在typename这里使用:

typename F::FArray a = typename F::Array();
于 2013-09-04T11:06:38.017 回答
1

乱码。另外,g++ 4.7 明确表示:

test.cpp:14:9: 错误: 'F:: FArray' 之前需要'typename' 因为'F' 是一个依赖范围

以下编译OK。

#include <boost/array.hpp>

template <typename T, int N>
class MyFunct {
    public:
          typedef boost::array<T,N> FArray;
              MyFunct();
};

template <typename F>
class MyClass {
    public:
        MyClass() {
            typename F::FArray a = typename F::FArray();
        }
};

int main(int argc, char** argv) {
      MyClass< MyFunct<double, 2> > m;
}
于 2013-09-04T11:19:33.633 回答