I am currently trying to implement a class with the Singleton Pattern in C++. But I get following linking error:
projectgen.cpp:(.bss+0x0): multiple definition of `Metadata::metadata'; C:\Users\adria\AppData\Local\Temp\ccdq4ZjN.o:main.cpp:(.bss+0x0): first defined here collect2.exe: error: ld returned 1 exit status
What's the error's cause?
Metadata.h: (Singleton class)
#pragma once
class Metadata
{
public:
Metadata(Metadata &other) = delete;
void operator=(const Metadata &other) = delete;
static Metadata *getInstance()
{
return metadata;
}
static void createInstance(Ctor ¶ms)
{
if (!metadata)
{
metadata = new Metadata(params);
}
}
protected:
Metadata(Ctor ¶ms)
{
m_vars = params;
}
static Metadata *metadata;
private:
Ctor m_vars;
}
Metadata* Metadata::metadata = nullptr;
main.cpp:
#include "metadata.h"
int main(void)
{
Ctor ctor;
Metadata::createInstance(ctor);
Metadata* data = Metadata::getInstance();
return 0;
}
projectgen.cpp:
#include "metadata.h"
void ProjectGenerator::test()
{
Metadata* data = Metadata::getInstance();
}