1

Sorry if it is duplicate! My problem is undefined reference to vtable for an inherited class. I have checked, there is no pure virtual method left undefined in base class. They are all defined. But still the problem persists. "undefined reference to 'vtable for sigListener'

here is base class:

class SIM_API cIListener
{
friend class cComponent;
friend class cResultFilter; 
private:
int subscribecount;
public:
cIListener();
virtual ~cIListener();
virtual void receiveSignal(cComponent *source, simsignal_t signalID, bool b) = 0;
virtual void receiveSignal(cComponent *source, simsignal_t signalID, long l) = 0;
virtual void receiveSignal(cComponent *source, simsignal_t signalID, unsigned long l) = 0;
virtual void receiveSignal(cComponent *source, simsignal_t signalID, double d) = 0;
virtual void receiveSignal(cComponent *source, simsignal_t signalID, const SimTime& t) = 0;
virtual void receiveSignal(cComponent *source, simsignal_t signalID, const char *s) = 0;
virtual void receiveSignal(cComponent *source, simsignal_t signalID, cObject *obj) = 0;
virtual void finish(cComponent *component, simsignal_t signalID) {}
virtual void subscribedTo(cComponent *component, simsignal_t signalID) {}
virtual void unsubscribedFrom(cComponent *component, simsignal_t signalID) {}
int getSubscribeCount() const  { return subscribecount; }
};

Here is the inherited class called sigListener.h:

#ifndef SIGLISTENER_H_
#define SIGLISTENER_H_

#include "coordObj.h"
#include "clistener.h"

class sigListener : public cIListener
{
public :
void receiveSignal(cComponent *source, simsignal_t signalID, bool b) { }
void receiveSignal(cComponent *source, simsignal_t signalID, long l) { }
void receiveSignal(cComponent *source, simsignal_t signalID, unsigned long l) { }
void receiveSignal(cComponent *source, simsignal_t signalID, double d);
void receiveSignal(cComponent *source, simsignal_t signalID, const SimTime& t) { }
void receiveSignal(cComponent *source, simsignal_t signalID, const char *s) { }
void receiveSignal(cComponent *source, simsignal_t signalID, cObject *obj) { }

};

Here is the sigListener.cc:

#include "sigListener.h"



void sigListener :: receiveSignal(cComponent *src, simsignal_t signalID, double d)
{
ev << signalID;
ev << d;
}
Masoud
  • 305
  • 1
  • 12

1 Answers1

0

This question has a few answers.

  • You need a destructor in your sigListener class
  • As one of the answers on that question points out, if they're compiled separately and you didn't link all required objects together then you could get this error.
Community
  • 1
  • 1
Brian Vandenberg
  • 4,011
  • 2
  • 37
  • 53