Wednesday 29 November 2017

c++ - Undefined reference to vtable

itemprop="text">


When building my C++
program, I'm getting the error message




undefined
reference to
'vtable...




What is
the cause of this problem? How do I fix it?



/>


It so happens that I'm getting the error
for the following code (The class in question is CGameModule.) and I cannot for the life
of me understand what the problem is. At first, I thought it was related to forgetting
to give a virtual function a body, but as far as I understand, everything is all here.
The inheritance chain is a little long, but here is the related source code. I'm not
sure what other information I should
provide.



Note: The constructor is where this
error is happening, it'd seem.



My
code:



class CGameModule : public
CDasherModule {
public:
CGameModule(Dasher::CEventHandler
*pEventHandler, CSettingsStore *pSettingsStore, CDasherInterfaceBase *pInterface,
ModuleID_t iID, const char *szName)
: CDasherModule(pEventHandler,
pSettingsStore, iID, 0, szName)

{

g_pLogger->Log("Inside game module constructor");
m_pInterface =
pInterface;
}

virtual ~CGameModule()
{};

std::string GetTypedTarget();


std::string GetUntypedTarget();


bool
DecorateView(CDasherView *pView) {
//g_pLogger->Log("Decorating the
view");
return false;
}

void
SetDasherModel(CDasherModel *pModel) { m_pModel = pModel;
}


virtual void HandleEvent(Dasher::CEvent *pEvent);



private:




CDasherNode *pLastTypedNode;


CDasherNode
*pNextTargetNode;



std::string
m_sTargetString;


size_t
m_stCurrentStringPos;


CDasherModel
*m_pModel;



CDasherInterfaceBase
*m_pInterface;
};


Inherits
from...



class
CDasherModule;
typedef std::vector::size_type
ModuleID_t;

/// \ingroup Core

///
@{
class CDasherModule : public Dasher::CDasherComponent {

public:
CDasherModule(Dasher::CEventHandler * pEventHandler, CSettingsStore *
pSettingsStore, ModuleID_t iID, int iType, const char *szName);


virtual ModuleID_t GetID();
virtual void SetID(ModuleID_t);

virtual int GetType();
virtual const char
*GetName();


virtual bool GetSettings(SModuleSettings
**pSettings, int *iCount) {
return false;
};


private:
ModuleID_t m_iID;
int m_iType;
const char
*m_szName;
};



Which
inherits from....



namespace Dasher
{
class CEvent;
class CEventHandler;
class
CDasherComponent;
};

/// \ingroup
Core

/// @{
class Dasher::CDasherComponent {

public:
CDasherComponent(Dasher::CEventHandler* pEventHandler,
CSettingsStore* pSettingsStore);
virtual
~CDasherComponent();

void InsertEvent(Dasher::CEvent *
pEvent);
virtual void HandleEvent(Dasher::CEvent * pEvent)
{};

bool GetBoolParameter(int iParameter)
const;

void SetBoolParameter(int iParameter, bool bValue)
const;

long GetLongParameter(int iParameter) const;

void SetLongParameter(int iParameter, long lValue) const;


std::string GetStringParameter(int iParameter) const;
void
SetStringParameter(int iParameter, const std::string & sValue)
const;

ParameterType GetParameterType(int iParameter)
const;
std::string GetParameterName(int iParameter)
const;


protected:
Dasher::CEventHandler
*m_pEventHandler;
CSettingsStore
*m_pSettingsStore;
};
///
@}


#endif



Answer




So, I've figured out the issue and it was a
combination of bad logic and not being totally familiar with the automake/autotools
world. I was adding the correct files to my Makefile.am template, but I wasn't sure
which step in our build process actually created the makefile itself. So, I was
compiling with an old makefile that had no idea about my new files
whatsoever.



Thanks for the responses and the
link to the GCC FAQ. I will be sure to read that to avoid this problem occurring for a
real reason.


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...