Tôi đang biên soạn với g ++ 4.4.7 (và không thể chuyển bất kỳ giá trị nào cao hơn hiện tại), và sử dụng công tắc trình biên dịch -std=gnu++0x
, điều này sẽ cho phép cú pháp của hàng.C++ không thể khởi tạo một con trỏ trong một cặp thành NULL
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
Tuy nhiên, trình biên dịch phàn nàn như sau:
/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*'
Tôi giả sử "int dài" là NULL, và rằng đối với một số lý do tôi không thể chuyển nó sang một con trỏ. Tuy nhiên, ở một nơi khác trong bản đồ cấu trúc, tôi đã có thể biên dịch một số thứ như
foo["X"] = { NULL, "bar", 12 }; // first element is a pointer
Sự khác biệt là gì?
Không sử dụng 'nullptr' thay vì công việc' NULL'? –
Nó không được hỗ trợ bởi g ++ 4.4. Không đến 4.6. – Chap