Я пишу программу, которая проходит вокруг типа структуры, которую я не хочу изменять. Эта структура имеет два const
членов, и выглядит следующим образом:error: unitialized member with const type C++
struct system_s {
std::string name;
std::string pkg;
char *const start_cmd[10];
char *const end_cmd[10];
bool ros;
bool equals(const system_s &cmp);
};
структура в настоящее время хранится в карте со следующим форматом. Он является членом класса:
std::map<std::string, system_s> sys_map;
Существует еще одна временная карта. Подумайте о sys_map
в качестве кеша, если хотите. Но на самом деле вам не нужно беспокоиться о том, как он используется ради этого вопроса. sys_map
вызывается для добавления системы во временную карту следующим образом. Именно в методе класса:
add_system(sys_map[msg->system]);
(*)
Эта функция имеет следующее определение. Это метод класса:
int add_system(const system_s &sys);
Когда (*) называется, я получаю следующее сообщение об ошибке:
system.h: In instantiation of ?std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = std::basic_string<char>; _Tp = system_s; _Compare = std::less<std::basic_string<char> >; _Alloc = std::allocator<std::pair<const std::basic_string<char>, system_s> >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = system_s; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = std::basic_string<char>]?:
/tc_manager_node.cpp:74:41: required from here
/system.h:26:8: error: uninitialized member ?system_s::start_cmd? with ?const? type ?char* const [10]? [-fpermissive]
struct system_s {
^
system.h:26:8: error: uninitialized member ?system_s::end_cmd? with ?const? type ?char* const [10]? [-fpermissive]
In file included from /usr/include/c++/4.8/map:61:0,
from /opt/ros/indigo/include/ros/console.h:42,
from /opt/ros/indigo/include/ros/ros.h:40,
from
/tc_manager_node.cpp:2: /USR/включать/C++/4.8/bits/stl_map.h: 469: 59: note: синтезированный метод? System_s :: system_s()? сначала требуется здесь __i = insert (__ i, value_type (__ k, mapped_type()));
Почему этот член типа system_s 'неинициализирован'? Предположительно, он уже инициализирован в sys_map
. Это связано с передачей system_s
в качестве ссылки в int add_system(const system_s &sys)
?
Члены класса 'const' должны быть инициализированы во время строительства объекта. 'start_cmd' и' end_cmd' не инициализируются. –
, какой тип переменной можно перевести в 'char * const *'? У меня были проблемы с этим актерским составом. – errolflynn
Где вы получаете 'char * const *' from –