gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:03:26 25 4
gpt4 key购买 nike

对于一个作业,我创建了一个分数类,该类重载了许多运算符。然后,我将其转换为一个供其他程序使用的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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com