明显调用括号前的表达式必须具有(指向)函数类型

Posted

技术标签:

【中文标题】明显调用括号前的表达式必须具有(指向)函数类型【英文标题】:expression preceding parentheses of apparent call must have (pointer-to-) function type 【发布时间】:2017-03-05 03:05:26 【问题描述】:

我在vs2015社区学习C++模板。这是我的代码,我想定义一个模板类并调用main()函数中的成员函数。

template <typename T>
class Arithmetic 
    T _a;
    T _b;
    Arithmetic() ;
public
    Arithmetic(T a, T b) :_a(a), _b(b) ;
    T max const()  return _a + _b; ;
    T minus const()  return _a - _b; ;
;

int main() 
    Arithmetic<int> ar(5,6);
    cout << ar.max() << endl;

当我构建这个程序时,我在最后一行得到错误。它说:

我该怎么办?

【问题讨论】:

你有没有机会包括Windows.h 【参考方案1】:

对于其他任何人,这也可能是因为重新定义了方法或属性名称。即属性和方法可能具有相同的名称

【讨论】:

大加一。谢谢。 或者只是在属性名称后使用() 哦,伙计,你可能刚刚为我节省了一个小时的时间。【参考方案2】:

该错误表明试图调用未定义为函数的函数 max()。将 const 关键字后的括号更改为标识符 max 后的括号:

T max const()...

T max() const ...

【讨论】:

【参考方案3】: 添加所需的标头包含和usingpublic 之后添加:const 移动到正确位置
#include <iostream>
using std::cout;
using std::endl;

template <typename T>
class Arithmetic 
    T _a;
    T _b;
    Arithmetic() ;
public:
    Arithmetic(T a, T b) :_a(a), _b(b) ;
    T max() const  return _a + _b; ;
    T minus() const  return _a - _b; ;
;

int main() 
    Arithmetic<int> ar(5,6);
    cout << ar.max() << endl;

【讨论】:

以上是关于明显调用括号前的表达式必须具有(指向)函数类型的主要内容,如果未能解决你的问题,请参考以下文章

明显调用的表达式前的括号必须具有(指针)函数类型 编译器错误 C2064

opencv动态目标检测,出现明显调用表达式前的括号必须具有(指针)函数类型的问题

使用仿函数时,括号前的表达式必须具有指向函数的类型

类中函数指针调用函数

在 CUDA 中使用 clock() 函数

从 2D 向量创建 1D 向量的函数(错误:表达式必须具有指向对象的指针类型)