String::c_str()和String::data()不能转换为const char*
string::c_str() and string::data() not working for conversion to const char*
我在一个定义为std::map<const char*, double>
的类中有一个映射结构,在构造函数中,我添加了三个元素,它们都设置为零,键为"MR_WP"、"MR_WM"answers"MR_WC"。我还有几个访问映射的函数,但是在执行访问之前,有一个函数检查键是否确实存在于映射中。
基本上,我有一些东西说:
if ( map.find(_key) == map.end() ) throw "error"
当我传递一个const char*字符串到访问函数,如getValue("MR_WP"),没有错误。
但是,如果我这样做:
std::string str = "MR_WP";
double value = map.getValue( str.c_str() );
-or-
std::string str = "MR_WP";
double value = map.getValue( str.data() );
则抛出错误。我尝试了两个函数,因为我认为错误可能是由null字符引起的。我之所以需要这样做,是因为我想在运行时获得键的最后一个字母,例如:
std::string type = getType();
std::string str = "MR_W" + type;
double value = map.getValue( str.c_str() ); //or with str.data()
如果您的地图是std::map<char const*, int>
,则—默认值—通过比较指针来比较键,而不是通过比较词法值。
回想一下当你这样做时会发生什么:
const char* str1 = "Some string";
const char str2[] = "Some string";
std::cout << (str1 == str2 ? "true" : "false");
// Output: false
用std::map<std::string, int>
代替;它不仅不会让你陷入所有权问题的泥潭,而且还提供了一个现成的比较对象!
相关文章:
- OpenCV undefined reference to 'cv::imread(cv::String const&, int)'
- std::shared_ptr<std::string const> 可以作为引用计数的不可变字符串的有效实现吗?
- Cpp 未定义引用 'Apache:: thrift:: transport:: TSocket:: TSocket (std:: string const&, int)'
- 对'PreconditionViolatedException::PreconditionViolatedException(std::string const&)'的未定义引用
- YAML::LoadFile(std::string const&) 找不到文件 [ROS 中的 yaml-cpp]
- 错误未定义对"BP::D evice::Create(std::string const&)"的引用
- "std::string const &s"和"const std::string &s"有什么区别?
- C++ 错误:对"(std::string) (const char[4])"的调用不匹配
- "std::string const"与"const std::string"
- 未定义引用 'htmlcxx::HTML::P arserDom::p arseTree(std::string const&)'
- 从int到c-string(const-char*)的转换失败
- 错误:未定义对"cv::imread(std::string const&, int)"的引用
- 为什么 std::string{ "const char ptr" } 有效?
- 对 'json11::Json::d ump(std::string&) const' collect2 的未定义引用:错误:ld 返回 1 个退出状态
- 在"string" "const unsigned char"和"utf8proc_uint8_t"之间转换的问题
- std::string::assign(std::string const&) 中的分段错误
- 未定义的引用 cv::imread(std::string const&, int)
- 函数定义后"const -> std::string const&"的含义?
- SIGILL on std::ios_base::Init::Init() 和 std::string::assign(std::string const&)
- 将非常量向量传递给引用<string> const 向量<const string>?