0

現在、次のように定義された 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( void)" (??1Win32Window@@UAE@XZ)

ファイルが継承クラスのヘッダー ファイルに #include されている限り、クラスが別のプロジェクトにあるかどうかは問題ではないことを認識していた限り、このエラーが発生する理由を理解できないようです。誰かが私にこのエラーを説明し、おそらくこのエラーの解決策を提供できますか? 最終的にはクラス IWindow を dll の一部として使用する予定ですが、それまでは、複数の異なるプロジェクト内のファイルを使用してこのソリューションをコンパイルおよびテストできる必要があります。

4

1 に答える 1

2

undefined pure virtual destructorに関するエラー メッセージが表示されます。

デストラクタは、それが純粋な仮想であっても、実装が必要です。の実装を含む .cpp ファイルがIWindow::~IWindow()プロジェクトに含まれていない可能性があります。そのため、リンカーはそれを見つけることができません。

于 2013-06-16T21:27:08.007 に答える