私は変更したくない構造体型を渡すプログラムを書いています。この構造体には2人のconst
メンバーを持ち、次のようになります。エラー:const型のユニット化されたメンバ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
に初期化されています。それはint add_system(const system_s &sys)
の参照としてsystem_s
を渡すことと関係がありますか?
'const'クラスのメンバは、オブジェクトの構築中に初期化する必要があります。 'start_cmd'と' end_cmd'は初期化されていません。 –
どの可変型を 'char * const *'にキャストできますか?私はそのキャストに問題があります。 – errolflynn
'char * const *'を –