第 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 *。那么,如何访问存储在 this->records.at(block) 中的 vector ,其中 block 是一个 const char*?
最佳答案
我认为解决此问题和许多其他潜在问题的最简单方法是图灵 std::map<char*, ...>
进入std::map<std::string, ...>
.
或者,定义一个合适的比较器:Using char* as a key in std::map
关于C++常量混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17759413/