Basically I want to share an enum between different classes. Separating the enum in its own header file with an unnamed namespace works fine, as long as one of the classes doesn't use the enum as a return type for a function.
The following example will not compile, it will result in a compiler error:
Test.obj : error LNK2019: unresolved external symbol "public: enum `anonymous namespace'::SharedEnum __thiscall ExampleClass::getEnum(void)" (?getEnum@ExampleClass@@QAE?AW4SharedEnum@?A0xe6c5ebe7@@XZ) referenced in function _main
As soon as you don't return the SharedEnum
type from ExampleClass
, but just an integer for example, everything compiles fine. I'd love to understand why this happens and what the best approach would be to share enums or variables between classes, without running into linker errors.
Any help is greatly appreciated!
Test.cpp
#include "stdafx.h"
#include "SharedEnum.h"
#include "ExampleClass.h"
SharedEnum mainEnum;
int main()
{
mainEnum = VALUE_1;
ExampleClass* exampleClass = new ExampleClass();
SharedEnum exampleEnum = exampleClass->getEnum();
return 0;
}
SharedEnum.h
#pragma once
namespace {
enum SharedEnum {
VALUE_1,
VALUE_2,
VALUE_3
};
}
ExampleClass.h
#pragma once
#include "SharedEnum.h"
class ExampleClass
{
public:
ExampleClass();
~ExampleClass();
SharedEnum getEnum();
private:
SharedEnum myEnum;
};
ExampleClass.cpp
#include "stdafx.h"
#include "ExampleClass.h"
ExampleClass::ExampleClass()
{
myEnum = VALUE_2;
}
ExampleClass::~ExampleClass()
{
}
SharedEnum ExampleClass::getEnum()
{
return myEnum;
}