我正在使用visual studio c ++进行编程。我在DLL中有Field,IField,Map和IMap。我创建接口IField和IMap,以便在单元测试中访问Field和Map。当我在单元测试中运行这个简单的代码时:
IMap m;
IField f(3, 4);
m.shoot(f);
我有以下错误:
LNK2019未解析的外部符号“public:virtual __thiscall Field ::〜Field(void)“(?? 1Field @@ UAE @ XZ)在函数中引用 “public:virtual void * __thiscall Field ::`标量删除 析构函数'(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。你有任何提示来解决这个奇特的错误吗?