我正在为我目前正在开发的小型游戏引擎(称为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
我还确保我包括了沙盒项目的所有内容。
我只想知道为什么使用第一种方法而不是第二种方法。