В основном я хочу разделить перечисление между различными классами. Разделение перечисления в его собственном заголовочном файле с безымянным пространством имен работает нормально, если один из классов не использует перечисление в качестве возвращаемого типа для функции.
Следующий пример не скомпилируется, он приведет к ошибке компилятора:
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
Как только вы не вернете тип SharedEnum
из ExampleClass
, а просто целое число, например, все скомпилируется нормально. Мне бы очень хотелось понять, почему это происходит, и каков наилучший подход к распределению перечислений или переменных между классами без ошибок компоновщика.
Любая помощь очень ценится!
Тест. 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;
}