在类中定义函数时的链接错误

时间:2019-05-21 19:55:30

标签: c++ dll

我正在为我目前正在开发的小型游戏引擎(称为Turbo)编写事件系统。我有一个名为“ KeyEvent”的类,该类从Event继承,而一个“ KeyPressedEvent”是从KeyEvent继承的。当我为类内部的类定义构造函数时,出现链接错误,但如果函数声明和定义分开,则不会得到链接错误:

此代码有效:

#pragma once
#include "Turbo/Core.h"
#include "Turbo/Events/Event.h"

namespace Turbo
{
  class TURBO_API KeyEvent : public Event
  {
  protected:
    int m_keyCode;

    KeyEvent(int keyCode);
  };

  class TURBO_API KeyPressedEvent : public KeyEvent
  {
  public:
    KeyPressedEvent(int keyCode);
  };

  KeyEvent::KeyEvent(int keyCode) : m_keyCode(keyCode) {}
  KeyPressedEvent::KeyPressedEvent(int keyCode) : KeyEvent(keyCode) {}
}

此代码无效:

#pragma once
#include "Turbo/Core.h"
#include "Turbo/Events/Event.h"

namespace Turbo
{
  class TURBO_API KeyEvent : public Event
  {
  protected:
    int m_keyCode;

    KeyEvent(int keyCode) : m_keyCode(keyCode) {}
  };


  class TURBO_API KeyPressedEvent : public KeyEvent
  {
  public:
    KeyPressedEvent(int keyCode) : KeyEvent(keyCode) {}
  };
}

(“事件”类当前为空)

宏“ TURBO_API”在生成引擎DLL时是__declspec(dllexport),在另一个项目导入时是__declspec(dllimport)。 我仅在“沙盒”项目(导入DLL)中遇到链接错误

我尝试初始化KeyPressed事件:

Turbo::KeyPressedEvent e(8);

但是我得到这个错误:

1>Sandbox.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl Turbo::KeyPressedEvent::KeyPressedEvent(int)" (__imp_??0KeyPressedEvent@Turbo@@QEAA@H@Z) referenced in function main

我还确保我包括了沙盒项目的所有内容。

我只想知道为什么使用第一种方法而不是第二种方法。

0 个答案:

没有答案