2

こんにちは、コンパイル エラーが発生しました。解決できないようです。

これが私がすることです: class2 のオブジェクトを宣言し、その関数を "function2" と呼びます。次に、この関数は、class1 のオブジェクトを宣言し、その関数「function1」を呼び出します。現在、このコードはその時点でコンパイル エラーを受け取ります (「function1」を正しく呼び出すことができません)。

エラー: ')' トークンの前にプライマリ式が必要です

ただし、役に立たない「function1」のコメントを外すと、コードはコンパイルされます。これは呼び出されている関数ではなく、まったく影響を与えるべきではないため、これは紛らわしいと思います。

#include <iostream>
using namespace std;

template<int parameter1>
class class1 {
    public:

    template < int parameter2 > void function1() {
        cout << "We do useful things here" << endl;
    }
};

template < int parameter3 >
class class2 {
    public:

    //template < char a, char b > bool function1() {
    //    cout << "Useless definition (?)" << endl;
    //}

    void function2() {
        class1 < parameter3 > an_instance_of_class1;
        an_instance_of_class1.function1 < 999 > ();
    }
};

int main(int argc, char** argv) {
    class2 < 99 > an_instance_of_class2;
    an_instance_of_class2.function2();
}

私が欠けているものを誰かが知っていますか?前もって感謝します。

コンパイラのバージョン:

$ g++ --version
g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
4

1 に答える 1

6

You need to use .template:

an_instance_of_class1.template function1 < 999 > ();

Look at the accepted answer here for more details.

于 2012-08-24T10:24:55.373 に答える