Compilation error when trying to give pointer to a function to another function
Pointer to a member function is a painful corner of C++ until C++11. This is why when you try to pass an instance method pointer to Wire.onReceive (without the static keyword), you will get an error similar to:

error: ISO C++ forbids taking the address of a bound member function to form a pointer to member function.  Say '&amp;PiCom::onReceiveCallback'


Well, you can't argue with the C++ ISO standard... changing the function to a static one (with external linkage, as they say) is indeed a workaround, as you have found out.
For this workaround to compile properly you just need to omit the static keyword from your definition (where it is implemented), and leave your declaration (in the header file) as is:

PiCom.h:

...
static void onReceiveCallback(int numbytes);
...


PiCom.cpp:

void PiCom::onReceiveCallback(int numbytes)
{
    ...
}


By doing this you can pass it to Wire.onReceive without any problem, from the PiCom constructor, as follows:

PiCom::PiCom(int address, int* integers[], double* doubles[])
{
    ...
    Wire.onReceive(&amp;PiCom::onReceiveCallback);
    ...
}