Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: C++
Expertise: Beginner
Feb 14, 2000



Building the Right Environment to Support AI, Machine Learning and Deep Learning

C-Style Function Pointers

While trying to port some C code to a C++ implementation, I ran into this problem. The module this came out of was designed to "automate data handling used to free and allocate memory as needed." When compiling the legacy code in VC++ (it was compilable with WATCOM C/C++ 11.0), I got a function pointer for allocs from a memory management module that looks like this:
void *(*gAlloc)(size_t size);
It generates this error:
    i:\sponline\src\mdc.cpp(18) : error C2040: 'gAlloc' : 'void *(*)(unsigned int)' differs in levels of indirection from 'void (*)(unsigned int)'
I understand the "size_t" attribute is out of string.h, but I've never run into a case of "levels of indirection." Does this mean that in C++ you can't have "void *(*..."?

The size_t parameter is not the problem. Rather, it seems like the function pointer you're passing doesn't match the expected type. gAlloc is a pointer to a function that takes size_t and returns void*, whereas the expected type is a pointer to function that takes size_t and returns void. In other words, the return types, void and void*, don't match.

You should check the declaration of the function that takes gAlloc and see what the expected pointer type is.

DevX Pro
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date