gpt4 book ai didi

c++ - vs c++ dll - 标量删除析构函数

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

我在 visual studio c++ 中编程。我在 DLL 中有 Field、IField、Map 和 IMap。我创建接口(interface) IField 和 IMap 以在单元测试中访问 Field 和 Map。当我在单元测试中运行这个简单的代码时:

IMap m;
IField f(3, 4);
m.shoot(f);

我有以下错误:

LNK2019 unresolved external symbol "public: virtual __thiscall Field::~Field(void)" (??1Field@@UAE@XZ) referenced in function "public: virtual void * __thiscall Field::`scalar deleting destructor'(unsigned int)" (??_GField@@UAEPAXI@Z) TestShipGameDll

#pragma once
class Field
{
public:
Field(int x, int y) : x(x), y(y) {}
virtual ~Field() {}
protected:
int x;
int y;
};

.

#ifdef IFIELD_EXPORTS  
#define IFIELD_API __declspec(dllexport)
#else
#define IFIELD_API __declspec(dllimport)
#endif

class IField :
public Field
{
public:
IFIELD_API IField(int x, int y) :Field(x, y)
IFIELD_API virtual ~IField() {}
};

.

class Map
{
public:
Map();
virtual ~Map();
void shoot(Field field)
{
//here is empty body of function
}

};

.

#ifdef IMAP_EXPORTS  
#define IMAP_API __declspec(dllexport)
#else
#define IMAP_API __declspec(dllimport)
#endif

class IMap :
public Map
{
public:
IMAP_API IMap() {}
IMAP_API virtual ~IMap() {}
IMAP_API void shoot(Field field)
{
Map::shoot(field);
}
};

.有点奇怪。看起来它缺少复制构造函数,但我在 Field 中没有任何指针。只有自动变量 x 和 y。您有解决这个奇怪错误的任何提示吗?

最佳答案

您必须使用 IFIELD_API 导出整个类 - 否则编译器生成的函数在共享库之外不可见,并且您将遇到链接器错误。

关于c++ - vs c++ dll - 标量删除析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42449063/

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