我在 Visual Studio 中为我的控制台应用程序创建了一个 DLL。
在我的 DLL 中,我有一个名为 Dialog_MainMenu 的类,其中有一个 *.cpp 文件和一个 *.h 文件。
以下错误消息:
错误9错误LNK2001:无法解析的外部符号
“__declspec(dllimport) 公共:静态枚举
Dialog_MainMenu::GAME_STATES Dialog_MainMenu::CurrentGameState"
(_imp?CurrentGameState@Dialog_MainMenu@@2W4GAME_STATES@1@A) C:\Users\Kevin\Desktop\c++
项目\开发_测试\激烈
Adventure\Dialogs\Dialog_MainMenu.obj 对话框
我有点不明白。仅当我在头文件中向原型添加枚举时才会发生这种情况。
头文件:
#ifdef DIALOG_MAINMENU_EXPORTS
#define DIALOG_MAINMENU_API __declspec(dllexport)
#else
#define DIALOG_MAINMENU_API __declspec(dllimport)
#endif
class Dialog_MainMenu {
public:
static DIALOG_MAINMENU_API enum GAME_STATES {
MAINMENU, GAME, OPTIONS, CREDITS, QUIT
};
static DIALOG_MAINMENU_API GAME_STATES CurrentGameState;
DIALOG_MAINMENU_API GAME_STATES GetState();
};
(不知道问题是不是在这里,所以补充一下)一般的.cpp文件:
//Get state
Dialog_MainMenu::GAME_STATES Dialog_MainMenu::GetState() {
// Code..
}
//Switching state
Dialog_MainMenu::CurrentGameState = Dialog_MainMenu::GAME_STATES::GAME;
我真的很感激任何帮助或至少一些建议,在那里我可以了解更多有关这个问题的信息。
您需要在全局范围内的 cpp 文件中定义静态成员。
Dialog_MainMenu::GAME_STATES Dialog_MainMenu::CurrentGameState;
或者,您也可以为其分配一些初始值。
Dialog_MainMenu::GAME_STATES Dialog_MainMenu::CurrentGameState = Dialog_MainMenu::GAME_STATES::GAME;
EDIT:
我在 Visual Studio 中为我的控制台应用程序创建了一个 DLL。在我的 DLL 中,我有一个名为 Dialog_MainMenu 的类,其中有一个 *.cpp 文件和一个 *.h 文件。
好的 - 当您编译 dll 时 - 您正在导出类型。所以,你需要define
中的静态成员.cpp
dll 文件。您还需要确保已启用以下定义DIALOG_MAINMENU_EXPORTS
在编译器设置中。这将确保类型被导出。
现在,当您将控制台应用程序与 dll 链接时 - 您将#include
dll 标头并且不启用任何定义DIALOG_MAINMENU_EXPORTS
在编译器设置中(只需保留默认设置)。这将使编译器知道您现在正在将类型从 dll 导入到控制台应用程序中。
我希望现在一切都清楚了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)