我有一个类模板,用于定义其中的类型:
#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
的成员。发生了什么事?
答案 0 :(得分:2)
您需要在此处使用typename
:
typename F::FArray a = typename F::Array();
答案 1 :(得分:1)
邋coding的编码。另外,g ++ 4.7明确说明:
test.cpp:14:9:错误:在'F :: FArray'之前需要'typename',因为'F'是一个依赖范围
以下编译好。
#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;
}