带有模板参数的函数的编译问题

时间:2012-08-24 10:18:35

标签: c++ templates

大家好,我有一个编译错误,我似乎无法通过。

这就是我所做的:我声明了一个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

1 个答案:

答案 0 :(得分:6)

您需要使用.template

an_instance_of_class1.template function1 < 999 > ();

查看已接受的答案here了解更多详情。