In C++ you are supposed to declare functions before you can use them. In your code
integrate is not declared before the point of the first call to
integrate. The same applies to
sum. Hence the error. Either reorder your definitions so that function definition precedes the first call to that function, or introduce a [forward] non-defining declaration for each function.
Additionally, defining external non-inline functions in header files in a no-no in C++. Your definitions of
integrate etc. have no business being in header file.
SkewNormalEvalutatable e(); declaration in C++ declares a function
e, not an object
e as you seem to assume. The simple
SkewNormalEvalutatable e; will declare an object initialized by default constructor.
Also, you receive the last parameter of
integrate (and of
sum) by value as an object of
Evaluatable type. That means that attempting to pass
SkewNormalEvalutatable as last argument of
integrate will result in
SkewNormalEvalutatable getting sliced to
Evaluatable. Polymorphism won’t work because of that. If you want polymorphic behavior, you have to receive this parameter by reference or by pointer, but not by value.