【发布时间】:2012-12-16 05:32:30
【问题描述】:
我认为这主要是语法错误(虽然在编译期间没有捕获,但只有在运行时才会发生错误)
我正在尝试开发一个事件驱动架构,我在其中保留一个 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 函数被异步进程调用
程序编译得很好..但是在:listenersi;线。 什么是正确的语法?
【问题讨论】:
-
我不知道当这个函数从不被调用时,你如何在
CommonIO::incomingMsgReceived中得到一个分段错误。 -
我不相信那是你真正的代码(
i是什么?)。请考虑创建SSCCE。 -
在您的
incomingMsgReceived中,参数的名称是什么,buf来自哪里,为什么需要强制转换? -
什么是buf?还是我呢?
-
嗨,你们是对的..这是一个相当大的程序的一部分..很难将整个内容粘贴到这里。但是,为了更好地理解,我对代码进行了一些编辑。 -incomingMsgReceived 被另一个进程异步调用。 - buf 是接收到的要传递的消息,但是,所有这些都有效,除了对 listeners[i](buf) 的调用;这是我没有使用正确语法的地方(很可能)。
标签: c++ vector function-pointers event-driven-design