Not clear from your post if you're including usingnamespace std; or not.
Several possibilities:
1) It would appear that you haven't included usingnamespace std;. Therefore the compiler is not looking in the std:: namespace for log().
2) If you've included usingnamespace std;, then your member function (calc::log) takes precedence in resolving the function call. If you want the log function in <cmath>, use the global scope resolution operator (::).
temp.base = ::log(x.base);
3) Since you haven't shown the class declaration for calc, it's not clear what type x.base is. Since you're using <math.h>, you're getting the C declarations, not the C++ declarations for log(). They are different. If x.base is not a double, that may explain why the compiler did not find a match. The declarations for log() vary depending on whether you're using C or C++ library and by which version of the standard.