C++ 奇怪的GCC错误:应在';之前使用主表达式';代币
我仍在尝试从MSVC迁移到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
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。否则,将假定该名称为非模板名称
附言:阅读此非常感谢!我知道模板关键字,但我从未想过在方法声明中使用它…现在我明白了,谢谢!我也非常感谢,我完全忘记了这一点。这解决了我遇到的一个类似问题!投了赞成票。