类'struct在头文件中的函数声明和cpp中的定义。 lnk2019在单独的lib

时间:2017-01-19 01:00:20

标签: c++ struct translation-unit

以下将构建良好。当我尝试在不同的库中使用函数时,我会遇到链接器错误。

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;

}

在实际代码中,类中定义了许多结构。所以我尝试用公共成员和成员函数制作所有嵌套类。类似的东西:lib build,lnk2019在单独的lib中使用函数时。 myClass中的其他函数工作正常。

它的使用方式如下:

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

        myClass::myClassStruct aStruct;

        FunctionThatInitialisesStruct( aStruct);

        aStruct.someConvoludedFunction(1,2);

    }
}

我正在做的事情显然是错的吗?是否单独声明结构函数定义是不标准的?

1 个答案:

答案 0 :(得分:1)

您还需要导出/导入myClassStruct的符号。

使用:

struct MY_EXPORT_MACRO myClassStruct { ... };