CAtlMap使用CString作为密钥

时间:2015-04-20 19:19:11

标签: c++ visual-studio-2012 mfc atl

为简单起见,我在Visual Studio中使用向导创建了新的MPF项目。我想将CAtlMapCString一起用作关键参数。我包含了<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?也许我错过了一些包含文件,我应该使用哪些?

2 个答案:

答案 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集合类。