1

29行目はコンパイルで窒息しています:

void
CI_Metadata::get_record_metadata(const char* block, RecordInfoVector* record_info_vector) {
    *record_info_vector = this->records.at(block); // <== LINE 29
    return;
}

エラーは次のとおりです。

CI_Metadata.cpp: In member function ‘void CI_Metadata::get_record_metadata(const char*, RecordInfoVector*)’:
CI_Metadata.cpp:29: error: invalid conversion from ‘const char*’ to ‘char*’
CI_Metadata.cpp:29: error:   initializing argument 1 of ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::at(const _Key&) [with _Key = char*, _Tp = std::vector<std::pair<char*, bool>, std::allocator<std::pair<char*, bool> > >, _Compare = std::less<char*>, _Alloc = std::allocator<std::pair<char* const, std::vector<std::pair<char*, bool>, std::allocator<std::pair<char*, bool> > > > >]’

これは、at() がconst char *を取らないことを意味すると思います。では、ブロックがconst char*であるthis->records.at(block)に格納されているベクトルにアクセスするにはどうすればよいでしょうか?

4

3 に答える 3

2

これを修正する最も簡単な方法と、その他の潜在的な問題を解決する最も簡単な方法はstd::map<char*, ...>std::map<std::string, ...>.

または、適切なコンパレータを定義します: Using char* as a key in std::map

于 2013-07-20T06:35:54.157 に答える
0

at() 関数を変更できる場合は、NPE の回答をお読みください。

at() 関数を制御できないが、get_record_metadata プロトタイプを制御できると仮定すると、パラメータを const として宣言されないように変更できます。

void
CI_Metadata::get_record_metadata(char* block, RecordInfoVector* record_info_vector) {

const char* を get_record_metadata に渡す 必要がある場合、唯一の代替手段は、const ではない別の char* にデータをコピーすることです。http://en.cppreference.com/w/cpp/string/byte/strcpy

于 2013-07-20T06:42:22.067 に答える