I am getting the following error:
error LNK2001: unresolved external symbol "public: virtual class AElementActor * __cdecl ElementFactory::CreateElement(int,int,int)" (?CreateElement@ElementFactory@@UEAAPEAVAElementActor@@HHH@Z)
with the following layout:
IElementFactory.h
struct IElementFactory
{
public:
virtual AElementActor* CreateElement(
int NeutronCount,
int ProtonCount,
int ElectronCount) = 0;
};
ElementFactory.h
#include "IElementFactory.h"
class ElementFactory : public IElementFactory
{
public:
AElementActor* CreateElement(
int NeutronCount,
int ProtonCount,
int ElectronCount) override;
};
ElementFactory.cpp
AElementActor* ElementFactory::CreateElement(
int NeutronCount,
int ProtonCount,
int ElectronCount)
{
// ...
}
If I move the definition to the header file for CreateElement, the program then compiles correctly:
ElementFactory.h updated
#include "IElementFactory.h"
class ElementFactory : public IElementFactory
{
public:
AElementActor* CreateElement(
int NeutronCount,
int ProtonCount,
int ElectronCount) override
{
// ...
}
};
What gives?
Must pure virtuals be defined by the header or atleast, all in the cpp file?