-1

これは主に構文エラーだと思います(コンパイル中にキャプチャされませんが、実行時にのみエラーが発生します)

私は 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();

}

メイン.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; ライン。これの適切な構文は何ですか?

4

1 に答える 1

2

継承と共通の基本クラスを使用しないのはなぜですか? コードを簡素化し、オブジェクトを詳細に記述しているため、データや他のメソッドなどがあります。

つまり、このようなもの

class incomingMsgReceiver {
   public:
      virtual void msgReceived(char *msg) = 0;
};

class MyMessage : public incomingMsgReceiver {
   public virual void msgReceieved(char *msg);
}

class OtherMyMessage : public incomingMsgReceiver {
   public virual void msgReceieved(char *msg);
}

void MyMessage::msgReceived(char *msg)
{
   /// Do stuff here

}

void msgReceived::OtherMyMessage(char *msg)
{
   /// Do stuff here

}

次に、あなたのためにcommon.h

class CommonIO
{
   private:
      std::vector<incomingMsgReceiver *> listeners;
   public:
      void addListner(incomingMsgReceiver *reveiver) { listners.push_back(reveiver); }

      void incomingMsgReceived(char*msg)
      {
         for (unsigned int j = 0; j < listeners.size(); j++)
         {
            listeners[j]->msgReceived((msg);
         }
      }
};
于 2013-01-01T16:40:32.003 に答える