#include "caudio.h" // Cabecera de la clase
//inicializamos el puntero est?tico
CAudio* CAudio::_ptrInstance = 0;
//inicializamos a cero el contador de instancias
int CAudio()::_iNumInstances = 0;
CAudio* CAudio::Instance(){
if (_ptrInstance = 0)
_ptrInstance = new CAudio();
return _ptrInstance;
}
void CAudio::Init (int iFrequency, Uint16 iFormat, int iChannels, int iChunkSize){
int iInit = Mix_OpenAudio(iFrequency, iFormat, iChannels, iChunkSize);
_iNumInstances++;
}
void CAudio::Close(){
Mix_CloseAudio();
_iNumInstances--;
}
Los errores estaban en caudio.cpp (que por cierto deber?a llamarse audio.cpp

)
El caso es que al inicializar las variables est?ticas no especificabas su tipo:
CAudio* CAudio::_ptrInstance;
significa "la variable _ptrInstance, de tipo CAudio* que pertenece al ?mbito CAudio" (cada clase crea un ?mbito)
Ah, y las variables est?ticas, al igual que los miembros est?ticos, existen aunque no hayamos creado ning?n objeto de la clase a la que pertenecen, por eso se deben inicializar de esa manera tan peculiar.
Debemos inicializar el puntero _ptrInstance a 0 porque f?jate que es la condici?n que necesita el m?todo Instance() para saber que el objeto no ha sido creado antes.