Login | Register   
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


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

C-Style Function Pointers

Question:
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 *(*..."?

Answer:
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.

 

 

Sitemap