c++ - 未定义从dll引用非成员运算符

标签 c++ qt mingw qt-creator

对于一个作业,我创建了一个分数类,该类重载了许多运算符。然后,我将其转换为一个供其他程序使用的dll。我遇到的问题是,当我尝试使用非成员运算符时,出现错误“ undefined reference 'operator +'”。
我相信我已经正确实现了dll,因为构造函数可以像任何成员函数/运算符一样正常工作。只是非成员(member)运营商给了我这个问题。

        Fraction frac1(1,5); //No errors
        Fraction frac2(2,5); //No errors
        Fraction frac3 = frac2 + frac1; //ERROR: undefined reference to 'operator+'
        //Note: + operator is a non-member operator
        frac2 += frac1; //No errors and is a member operator
我一直在尝试解决此问题,并且在Google搜索了好几个小时都没有成功。这可能是一个链接问题,但如果如此,我就没有运气了。
我正在使用Qt Creator(因为我正在使用GUI)和MinGW。

最佳答案

简短版:您需要正确导出/导入我们的库对象和代码。

长版:
header 中的某处将是类似于以下内容的宏定义:

#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(export)
#else
#define MYDLL_API __declspec(import)
#endif
以后,此宏将在 header 和实现文件中的许多位置使用。例如,一个简单的函数声明如下:
MYDLL_API int MyFunction(int);
或者作为另一个示例,同样可以导出整个类及其成员:
class MYDLL_API MyClass
{
    // members...
};
编译DLL(即构建实际的DLL项目)时,在仅主要项目的 header (不是DLL公开的 header )或实际的构建命令中定义了预处理程序宏MYDLL_EXPORTS。反过来,这会使所有MYDLL_API装饰的符号“导出”。即,使用上面的API示例,这是:
MYDLL_API int MyFunction(int);
变成这个:
__declspec(dllexport) int MyFunction(int);
使用 header 和DLL导入库时,请勿定义MYDLL_EXPORTS宏,而 header 中的相同函数decl现在看起来像这样:
__declspec(dllimport) int MyFunction(int);
好。那是很多信息,或者最终归结于此。您的DLL中有一个声明但未导出的自由函数运算符。即鉴于以上所有内容,您有一个Fraction类,可能看起来像这样:
class MYDLL_API Fraction
{
    // members
};
还有一个如下所示的自由函数运算符:
Fraction operator +(Fraction, Fraction);
后者应如下所示:
MYDLL_API Fraction operator +(Fraction, Fraction) 

关于c++ - 未定义从dll引用非成员运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64561994/

相关文章:

c++ - 标题中的数组

c++ - 在 C++ 或 Qt 中格式化 XML 文件

android - 如何在 Qt for Android 中发送短信?

qt - Qt 项目的 Svg 到 pdf 转换器

c++ - Ray Tracer,阴影射线产生黑圈?

c++ - 我应该为具有不同类型参数的类使用 Boost Variant

c++ - MFC 应用程序在 CSingleLock Lock() 后挂起

command-line - MinGW make 命令的奇怪问题(使用 muParser)?

c++ - 列出导致线程本地单例类崩溃的析构函数

gcc - 在 GCC makefile 的目标中允许空间