1

私は問題を抱えていましたが、最終的にはこの単純な例に絞り込みました。

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) {}
};

これはMSVC2010で正常にコンパイルされますが、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)

どうしたの?

4

2 に答える 2

1

明示的に呼び出す必要がありますBase<dimensions>::base_method()

于 2013-01-14T15:59:36.933 に答える
1

あなたはしなければならない:

this->base_method();

また

Base<dimension>::base_method();

コンパイラーは通常、関数解決のためにテンプレート化された基本クラスのメソッドを考慮しません。

于 2013-01-14T16:00:39.763 に答える