为简单起见,我在Visual Studio中使用向导创建了新的MPF项目。我想将CAtlMap
与CString
一起用作关键参数。我包含了<atlcoll.h>
标题,当我尝试编译以下代码时:
CAtlMap<CString, double> myMap;
CString strMyKey = L"MyKey";
myMap.SetAt(strMyKey, 76.8);
我收到了这个错误:
'<function-style-cast>' : cannot convert from 'const CString' to 'ULONG_PTR'
当我使用简单类型(例如int
)代替CString
项目时,编译没有任何错误。是否可以像上面的例子一样使用CString
?也许我错过了一些包含文件,我应该使用哪些?
答案 0 :(得分:1)
请使用CMap
代替CAtlMap
,因为它已过时/弃用(ATL和MFC集合类已统一)。您应该像这样定义您的地图:
CMap<CString, LPCTSTR, double, double> myMap;
另请考虑使用operator[]
代替SetAt()
,以便更好地了解您的代码。
如果出于某种原因(与某些旧/旧项目兼容),您必须使用CAtlMap
,您必须执行此操作:CAtlMap<CString, double, CStringElementTraits<CString> > map;
答案 1 :(得分:0)
Visual Studio 2012 CAtlMap
类适用于上述用途,不会产生编译错误。您可以为ATL支持创建一个控制台应用程序复选框,此代码可以编译并运行良好。
#include "stdafx.h"
#include <atlcoll.h>
int _tmain(int argc, _TCHAR* argv[])
{
CAtlMap<CString, double> myMap;
CString strMyKey = L"MyKey";
myMap.SetAt(strMyKey, 76.8);
return 0;
}
正如您所提到的,您正在使用遗留项目,可能会发生它有一个旧版ATL的副本,例如ATL 3.0。实际上,旧的ATL可能会出现这样的问题,如果这是问题,您可能需要将代码切换到更新的ATL集合类。