Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 奇怪的GCC错误:应在';之前使用主表达式';代币_C++_Templates_Gcc - Fatal编程技术网

C++ 奇怪的GCC错误:应在';之前使用主表达式';代币

C++ 奇怪的GCC错误:应在';之前使用主表达式';代币,c++,templates,gcc,C++,Templates,Gcc,我仍在尝试从MSVC迁移到GCC,但似乎无法找到以下问题的解决方案: template < typename A, typename B, typename C, typename D > class Test { public: Test (B* pObj, C fn, const D& args) : _pObj(pObj), _fn(fn), _args(args) { } A operator() () { r

我仍在尝试从MSVC迁移到GCC,但似乎无法找到以下问题的解决方案:

template < typename A, typename B, typename C, typename D >
class Test
{
public:
    Test (B* pObj, C fn, const D& args) : _pObj(pObj), _fn(fn), _args(args)
    {
    }

    A operator() ()
    {
        return _args.operator() < A, B, C > (_pObj, _fn); // error: expected primary-expression before ',' token
    }

    B* _pObj;
    C _fn;
    D _args;
};
模板
课堂测试
{
公众:
测试(B*pObj、C-fn、const D和args):\u-pObj(pObj),\u-fn(fn),\u-args(args)
{
}
运算符()
{
return _args.operator()(_pObj,_fn);//错误:应在“,”标记之前使用主表达式
}
B*_pObj;
C_fn;
D_args;
};

请帮忙

尝试
返回_args.template操作符()(_pObj,_fn)

如果没有
模板
关键字,解析将不同。如果不额外使用
模板
,编译器不知道小于标记(在后缀表达式中,或在限定id中嵌套名称说明符之后)和后缀表达式或限定id显式依赖于模板参数(14.6.2),成员模板名称的前缀必须为关键字template。否则,将假定该名称为非模板名称


附言:阅读此

非常感谢!我知道模板关键字,但我从未想过在方法声明中使用它…现在我明白了,谢谢!我也非常感谢,我完全忘记了这一点。这解决了我遇到的一个类似问题!投了赞成票。