我正在使用 Embarcadero RAD Studio XE C++ Builder。我在让我的 STL 映射正常工作时遇到了一点问题。
#ifndef BbTabManagerH
#define BbTabManagerH
#include "BbSeExplorer.h"
#include "BbTabPage.h"
#include <map>
#define TAB_MANAGER_MAX_TABS 7
class TBbSeExplore;
typedef std::map<std::string, BbTabPage> TabPageMap;
typedef std::map<std::string, BbTabPage>::iterator TabPageMapIt;
我的问题在以下行:
typedef std::map<std::string, BbTabPage> TabPageMap;
这给了我一个编译器错误:
[BCC32 错误] BbTabManager.h(13): E2451 Undefined symbol 'BbTabPage' 完整解析器上下文 stdafx.h(229): #include ..\src** * \Gui\Utilities\BbTabPage.h BbTabPage.h(5) : #include ..\src* ** \Gui\Frames\BbSeExplorer.h BbSeExplorer.h(10): #include ..\src** * *\Gui\Utilities\BbTabManager.h
我觉得这很奇怪,我包含了“BbTabPage.h”,它声明了“BbTabPage”类,那么未定义的符号从何而来?
我尝试做这样的前向声明:
class BbTabPage;
但这似乎并没有太大的区别,只是它给了我更多的编译器错误。奇怪的是,如果我将其更改为指针:
typedef std::map<std::string, BbTabPage*> TabPageMap;
一切都编译得很好。
这个问题让我发疯,我一直试图找到几个小时的解决方案。类必须符合某种要求才能用作地图中的值吗?