我認爲這主要是一個語法錯誤調用一個成員函數的函數指針從一個函數指針向量
我試圖開發一種事件驅動型(雖然不是在編譯期間捕捉到,只有在運行時沒有錯誤發生)架構,我保留了eventReceiver的矢量,並嘗試從矢量中調用它們。
CommonIO.h
class CommonIO {
public:
typedef void (*incomingMsgReceiver)(char*);
void registerForIncomingMsg(incomingMsgReceiver);
void incomingMsgReceived(char*);
}
CommonIO.cpp
std::vector<void (*)(char*)> listeners;
void CommonIO::registerForIncomingMsg(incomingMsgReceiver receiverFunction) {
listeners.push_back(receiverFunction);
}
void CommonIO::incomingMsgReceived(char* buf) {
for (unsigned int j = 0; j < listeners.size(); j++) {
listeners[i](buf); //error, segmentation fault..how do i call it?
}
}
Main.h
class Main {
public:
static void msgReceived(char*);
void mainLoop();
}
Main.cpp的
void Main::msgReceived(char* msg)
{
printf("\n\n --------->>>>> %s \n\n" , msg);
}
void Main::mainLoop()
{
CommonIO::incomingMsgReceiver receiver = &Main::msgReceived;
CommonIO::getInstance()->registerForIncomingMsg(receiver);
}
incomingMsgReceived功能由一個異步過程
的程序編譯fine..however在分解稱爲:listenersi;線。 這是什麼適當的語法?
我不知道當從不調用該函數時,如何在'CommonIO :: incomingMsgReceived'內部得到分段錯誤。 –
我不相信那是你真正的代碼(什麼是'我'?)。請考慮創建一個[SSCCE](http://sscce.org)。 –
在你的'incomingMsgReceived'中,參數的名字是什麼,'buf'來自哪裏,爲什麼它需要投射? – DCoder