我遇到了一个问题,我最终将其简化为这个简单的示例:
template <int dimensions> class Base {
protected:
Base(void) {}
public:
virtual ~Base(void) {}
void base_method(void) {}
};
template <int dimensions> class MyClass : public Base<dimensions> {
public:
MyClass(void) : Base<dimensions>() {
base_method();
}
~MyClass(void) {}
};
这在 MSVC 2010 上编译得很好,但在 g++ 4.6 上失败:
main2.cpp: In constructor âMyClass<dimensions>::MyClass()â:
main2.cpp:12:16: error: there are no arguments to âbase_methodâ that depend on a template parameter, so a declaration of âbase_methodâ must be available [-fpermissive]
main2.cpp:12:16: note: (if you use â-fpermissiveâ, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
这是怎么回事?