我是一个MFC的初学者。
我尝试像这样初始化std :: map
:(在CView的头文件中)
// myprogramView.h
std::map<int, CStatic> myMap = {{10,{}}, {11,{}}};
但是编译器报错:"no instance of constructor ... matches the argument list"。
(为了以后参考的编辑) 上面的消息是 IntelliSense 的错误。编译器(MSVC)说:C2664 'std::map<int,CStatic,std::less,std::allocator<std::pair<const _Kty,_Ty>>>::map(std::initializer_list<std::pair<const _Kty,_Ty>>)': 无法将参数1从'初始化列表'转换为'std::initializer_list<std::pair<const _Kty,_Ty>>'。
然而,我们可以进行以下类型的初始化:
std::map<int, std::string> myMap2 = { {10,{}}, {11,{}} };
std::map<int, std::map<std::string, int>> myMap3 = { {10,{}}, {11,{}} };
第一个示例为什么无法编译?如何使用包含MFC对象的map?
我尝试在运行时或在
OnCreate
中访问映射中的控件对象并调用.Create()
方法。我也尝试了
CMap
,但似乎出现了相同的问题。
j6t的答案解决了问题。只想澄清答案是关于
std::initializer_list
,而不是“成员初始化列表”。
std::map
。你真正想要解决的问题是什么? - IInspectableCStatic
的映射表会很方便,因为我可以通过键来访问它们(在for循环中键会不同)。也许我可以使用std::vector等,这只是一个快速的想法。 - starrietCWnd::GetDlgItem
将控件ID转换为控件。或者只需调用CWnd::SetDlgItemText
。 - IInspectableCWnd
,因此您可以直接使用这些成员。 - IInspectable