定义从DLL导入的结构只有在头文件中定义其构造函数时才有效

时间:2015-09-23 19:40:29

标签: c++ dll struct linker unresolved-external

问题

错误LNK2019:未解析的外部符号“public:__thiscall Vector3 :: Vector3(void)”(?? 0Vector3 @@ QAE @ XZ)在函数_WinMain @ 16中引用

详情

我有一个自定义的Vector3类,其基本构造函数Vector3()在Maths.h文件中声明:

    struct Vector3
    {
        float x;
        float y;
        float z;

        Vector3();
     ...
     }

并在Maths.cpp中定义:

    Vector3::Vector3()
    {
        this->x = 0;
        this->y = 0;
        this->z = 0;
    }

模块“Maths”是DLL的一部分。只要我在DLL的模块中使用Vector3类就像往常一样。 然而在特定情况下,当我尝试在与DLL链接的可执行文件中定义它时,我得到了未解析的外部符号。 E.g:

    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
    {
        ...
        Vector3 a = Vector3();
        ...
    }

我找到了解决方法。如果我在Maths.h中执行定义并完全在Maths.cpp中省略它,就像这样:

    struct Vector3
    {
        float x;
        float y;
        float z;

        Vector3()
        {
           this->x = 0;
           this->y = 0;
           this->z = 0;
        }
     ...
     }

它有效。但我不知道问题是什么,以及为什么它只在这种特殊情况下表现出来。

0 个答案:

没有答案