У меня есть следующий заголовок:Классов и недействительные указатели
class MyClass {
private:
static void (*OnRequest)();
static void (*OnReceive)(int numBytes);
public:
MyClass();
static void SetOnReceive(void (*function)(int));
static void SetOnRequest(void (*function)(void));
};
void NonClassFunction();
и следующее заявление:
#include "MyClass.h"
MyClass::MyClass() {
...
}
void MyClass::SetOnReceive(void (*function)(int)) {
OnReceive = function;
}
void MyClass::SetOnRequest(void (*function)(void)) {
OnRequest = function;
}
void NonClassFunction() {
MyClass::OnRequest();
}
Код компилируется нормально, но я получаю следующие ошибки, когда я связываю:
неразрешенный символ MyClass :: OnReceive, сначала ссылающийся на ./src/MyClass.obj
unreso lved символ MyClass :: OnRequest, первая ссылка в ./src/MyClass.obj
мне нужно OnRequest и OnReceive функционировать как обратный вызов через NonClassFunction(). Функция NonClassFunction вызывается прерыванием, поэтому здесь происходит немного объектно-ориентированного манипулирования. MyClass предназначен для наследования. В идеале я бы хотел, чтобы OnRequest и OnReceive были виртуальными, но вы не можете делать статические методы виртуальными.
Из comp.lang.C++ FAQ: http://www.parashift.com/c++- faq/link-errs-static-data-mems.html – jamesdlin