C无法将对中的指针初始化为NULL
发布时间:2020-12-16 04:55:24 所属栏目:百科 来源:网络整理
导读:我正在使用g 4.4.7进行编译(当前不能更高),并使用-std = gnu 0x编译器开关,它应该允许第三行的语法. typedef std::vectorCI_RecordInfo_Pair CI_RecordInfo_Vector;typedef std::vectorstd::pairstd::string,CI_RecordInfo_Vector* MgrBlks;MgrBlks mgr_n_bl
我正在使用g 4.4.7进行编译(当前不能更高),并使用-std = gnu 0x编译器开关,它应该允许第三行的语法.
typedef std::vector<CI_RecordInfo_Pair> CI_RecordInfo_Vector; typedef std::vector<std::pair<std::string,CI_RecordInfo_Vector*> > MgrBlks; MgrBlks mgr_n_blks { {"T2M_NAME",NULL} }; // <--- line 59 但是,编译器抱怨如下: /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_pair.h: In constructor 'std::pair<_T1,_T2>::pair(_U1&&,_U2&&) [with _U1 = const char (&)[9],_U2 = long int,_T1 = std::basic_string<char,std::char_traits<char>,std::allocator<char> >,_T2 = CI_RecordInfo_Vector*]': tom.cpp:59: instantiated from here /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_pair.h:90: error: invalid conversion from 'long int' to 'CI_RecordInfo_Vector*' 我假设“long int”是NULL,并且由于某种原因我无法将其转换为指针.然而在结构图的其他地方,我能够编译类似的东西 foo["X"] = { NULL,"bar",12 }; // first element is a pointer 有什么不同? 解决方法
编译器拒绝此行是正确的:
MgrBlks mgr_n_blks { {"T2M_NAME",NULL} }; 在C 11中,std :: pair有一个模板构造函数,它接受任何参数类型,然后将它们转换为成员: template<typename X,typename Y> pair(X&& x,Y&& y) : first(std::forward<X>(x)),second(std::forward<Y>(y)) { } NULL必须定义为0或0L或类似的东西,因此模板参数推导将构造函数的模板参数推导为const char *和(with GCC)long.第一个参数类型可转换为std :: string但long不能转换为CI_RecordInfo_Vector *,因此无法调用构造函数. 对于带有结构映射的另一种情况,没有参数推导,赋值的RHS必须可转换为结构类型,在这种情况下,NULL用于直接初始化结构的第一个成员,而不是首先推导为long并初始化一个long,它不能转换为指针. 不要在C 11中使用NULL,发明nullptr是为了避免这些问题,你应该使用它. 一种可能的解决方法是将参数转换为正确的类型: MgrBlks mgr_n_blks { {"T2M_NAME",(CI_RecordInfo_Vector*)NULL} }; 但是使用nullptr更简单,更清晰. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- c# – 过度使用switch语句开销
- c# – 在EF中使用单个或多个DbContext有什么优缺
- .net – XmlSerializer和嵌入式WhiteSpace
- c# – LINQ FirstOrDefault返回1个以上的结果
- .NET Reactor v 3.6.0.0 19.01.08
- 彻底删除Oracle数据库的方法
- react-native – 在React-Navigation中为Tabnavi
- JSON.parse()和JSON.stringify()
- com.alibaba.fastjson.JSONException: not close
- 使用VB.NET替换String中的换行符(LF)
热点阅读