Объявление функции класса ' Struct в заголовке и определение в cpp. lnk2019 при использовании функции в отдельной библиотеке

Следующее построит нормально. Когда я пытаюсь использовать функцию в другой библиотеке, я получаю ошибки компоновщика.

OtherClass.obj : error LNK2019: unresolved external symbol "public: float __cdecl myClass::myClassStruct::myConvoludedFunction(int,int)" (?myConvoludedFunction@myClassStruct@myClass@@QEAAMHH_N@Z) referenced in function "public: __cdecl myNamespace::OtherClass::OtherClassFunc(class myNamespace::Something &)" (??0OtherClass@myNamespace@@QEAA@AEAVDtDe@1@@Z)

Заголовок:

   class MY_EXPORT_MACRO myClass
   {
    public:
        myClass();
        ~myClass();
        struct myClassStruct
        {
            int var1
            int var2
            float myConvoludedFunction(int,int);
        }
    }

CPP

#include "myClass.h"
myClass::myClass()
{
    //something initialisy
}

myClass::~myClass()
{
    //something destructiony
}

float myClass::myClassStruct::myConvoludedFunction(int a, int b)
{
    //Something convoluded and secret
    return 0;

}

В реальном коде есть ряд структур, определенных в классе. Поэтому я попытался сделать их вложенными классами с открытыми членами и функциями-членами. Аналогичная вещь: сборка библиотеки, lnk2019 при использовании функций в отдельной библиотеке. Другие функции в myClass работают нормально.

Он используется так:

#include myClass.h
namespace myNameSpace
{
    OtherClass::OtherClassFunc(Something & athing)
    {
        myClass * object = new myClass();

        myClass::myClassStruct aStruct;

        FunctionThatInitialisesStruct( aStruct);

        aStruct.someConvoludedFunction(1,2);

    }
}

Есть что-то, что я делаю, что явно не так? Разве не стандартно, чтобы определения структурных функций объявлялись отдельно?

1 ответ

Решение

Вам необходимо экспортировать / импортировать символы для myClassStruct также.

Использование:

struct MY_EXPORT_MACRO myClassStruct { ... };
Другие вопросы по тегам