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

时间:2017-02-24 22:04:26

标签: c++ visual-studio dll

我正在使用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。你有任何提示来解决这个奇特的错误吗?

0 个答案:

没有答案