expression preceding parentheses of apparent call must have (pointer-to-) function type
Matthew Martinez
I am learning C++ templates on vs2015 community.Here is my code, I want to define a template class and call the member function in the main() function.
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;
}When I build this program, I get error at the last line. It says:
Expression preceding parentheses of apparent call must have (pointer-to-) function type
What should I do?
14 Answers
For anyone else this might also be because of redefinition of a method or property name. i.e a property and method might have the same name
2The error indicates trying to call a function max() that is not defined as a function. Change parenthesis after const keyword to after the identifier max:
T max const()...to
T max() const ... - Add required header inclusion and
using - Add
:afterpublic - Move
constto proper position
#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;
} 0 This problem can also be caused if you are sending non-constant values into the max method.
This is the syntax for max:
constexpr const T& max (const T& a, const T& b, Compare comp); 2