Hello, I'm having an issue with boost::function in Visual Studio.NET
2005. In the following program:
#include
void SomeFunc(int* Blah)
{
//DoSomething
}
int __cdecl main(int argc, char* argv[], char* envp[])
{
boost::function MyFunc;
}
I get the following error message:
(Project Directory)\boostfunctest.cpp(11) : error C2079: 'MyFunc' uses
undefined class 'boost::function'
with
[
Signature=void (__stdcall *)(int *)
]
If I leave off the "(*)" it will compile, but this is just a
simplified version of my real problem.
The main reason this is a concern is I have a templated function that
looks like this:
template<typename Signature>
boost::function<Signature> GetFunction(Signature ToCall);
Which I intend to use to record and "play back" certain function
calls. However, when it sees the signiture from the function pointer,
it ALWAYS sees it as 'void(*)(int*)' (for example), rather than
'void(int*)' and fails to compile. For example, the following program:
#include
void SomeFunc(int* Blah)
{
//DoSomething
}
template<typename Signature>
boost::function<Signature> GetFunction(Signature ToCall)
{
//TODO: Check if function is in list, add it to list, etc.
return boost::function<Signature>(ToCall);
}
int __cdecl main(int argc, char* argv[], char* envp[])
{
GetFunction(SomeFunc);
}
I get:
(Project Directory)\boostfunctest.cpp(17) : error C2027: use of
undefined type 'boost::function'
with
[
Signature=void (__stdcall *)(int *),
Allocator=std::allocator
]
So, anyone have any idea what's wrong and how to fix it? Thanks for any help.
Note: I am compiling with /Gz, but compiling with /Gd and /Gr merely
changes the "__stdcall" to "__cdecl" and "__fastcall" in the error
messages, respectively, so it does not seem to matter which calling
convention is used.
--
Erzengel des Lichtes
光の大天使 (Hikari no Daitenshi)
Archangel of Light