使用VS2012中另一个项目的界面

时间:2013-06-16 21:24:47

标签: c++ linker

我目前正在尝试从这样定义的c ++接口继承:

class IWindow: public Initializable
{
public:
    virtual ~IWindow(void) =0;

    virtual BOOL IsVisible(void) =0;
    virtual void Show(BOOL inbShow) =0;
};

此接口在与尝试从中继承的类的单独项目中定义。该类定义如下:

#include "IWindow.h"

class Win32Window: public IWindow
{
    HGLRC m_renderingContext;
    HWND m_win32Handle;
    HDC m_deviceContext;

    BOOL m_bVisible;
public:
    Win32Window(void);
    virtual ~Win32Window(void);

    virtual void Initialize(void);
    virtual void Destroy(void);

    virtual BOOL IsVisible(void);
    virtual void Show(BOOL inbShow);
};

我在IWindow公开定义的纯虚构造函数上遇到外部符号问题,确切的错误信息是:

1> Win32Window.obj:错误LNK2019:未解析的外部符号“public:virtual __thiscall IWindow ::〜IWindow(void)”(?? 1IWindow @@ UAE @ XZ)在函数“public:virtual __thiscall Win32Window ::”中引用~Win32Window(无效)“(?? 1Win32Window @@ UAE @ XZ)

我似乎无法理解为什么会出现这个错误,只要我知道一个类是否在另一个项目中,只要该文件是#included到继承类的头文件中就不重要了。任何人都可以向我解释这个错误,并可能提供此错误的解决方案吗?我最终计划将类IWindow作为dll的一部分,但在此之前,我需要能够使用多个不同项目中的文件编译和测试此解决方案。

1 个答案:

答案 0 :(得分:2)

您有关于未定义的纯虚拟析构函数的错误消息。

析构函数,即使它是纯虚拟的,也必须有一个实现。很可能是一个包含IWindow::~IWindow()实现的.cpp文件未包含在项目中。这就是链接器无法找到它的原因。