当前位置: 首页 > 知识库问答 >
问题:

STL映射,将0值赋给键会导致编译错误

常献
2023-03-14

我在使用map类时遇到了一个编译器问题,并编写了以下简单程序来突出显示错误:

  1 #include <string>
  2 #include <map>
  3
  4 using namespace std;
  5
  6 int main()
  7 {
  8     map<string, string> testmap;
  9
 10
 11     testmap["one"] = 11;
 12     testmap["two"] = 22;
 13     testmap["zero"] = 0;
 14     // testmap["zero"] = 10;
 15
 16     return 0;
 17 }

我发现以下编译错误:

g./test.cc./test.cc:在函数int main()': ./ test.cc:13: 23:错误:在testmap.std::映射中的操作符=的模糊重载

我有几个问题:1。起初,我认为映射“值”——11和22正在转换为字符串。然而,在得到这个编译器错误后,我却不这么认为。引擎盖下面到底发生了什么:testmap[“一”]=11;

>

  • 如果值11、22实际上转换为字符串,那么为什么0没有转换为字符串。

    我正在努力理解编译器的错误信息,这样我就可以自己解码错误了。我理解其中的一部分,其中模板映射类定义被扩展为字符串类型的键/值。有人能给我指出错误信息中可以帮助我理解问题的部分吗。

    非常感谢您的帮助。

    谢谢你Ahmed

  • 共有1个答案

    邹俊豪
    2023-03-14

    如果值11、22实际上已转换为字符串,那么为什么0未转换为字符串。

    他们不是。你的11和12个作业与basic_字符串匹配

    0是特殊的,因为它允许被隐式转换为指针(在C 03NULL将被定义0),因此转换是不明确的(即char< /code>orconst char*?)-请参阅http://en.cppreference.com/w/cpp/string/basic_string/operator=了解std::字符串运算符=s的列表。

    4.10指针转换[conv.ptr] 1空指针常量是值为零的整数文字(2.14.2)或类型为std::nullptr_t的prvalue。空指针常量可以转换为指针类型;...

    其他整数没有这种指针转换豁免——这就是为什么它们不会出现编译器错误。

    你必须:

    • 正确地将数字转换为字符串表示,例如使用std::to_string()boost::lexical_cast、astd::ostringstream等。。,或

     类似资料:
    • 问题内容: 遇到一个错误地使用 而不是 在其代码中的人,它没有显示为编译错误。 是因为 是相同的 ? 问题答案: 没有编译错误,因为它是有效的(尽管相当无用) 一元运算符 ,其使用方式与以下方式相同: Java语言规范中的相关部分是Unary Plus运算符+(第15.15.3节) 。它指定调用一元运算会导致操作数的一元数值提升(第5.6.1节)。这意味着: * 如果操作数是编译时类型的,,,或,

    • 问题内容: 我正在努力寻找合适的措词来回答我的问题(这可能就是为什么我无法使用Google),但归结为:为什么下面的行无效? 我收到了一个编译时错误。班级和班级。 我已经阅读了有关泛型的Oracle文档,但显然这里缺少一些关键之处。朝正确方向轻推将不胜感激! 问题答案: 今天早些时候,我认为您想成为的数据类型。当然,这是将与您创建的对象匹配的数据类型,但是我怀疑在这种情况下它是否真的是您想要的。请

    • 我刚开始使用React-Native。我尝试使用在我的应用程序中添加google map 我参考了https://github.com/react-community/react-native-maps/blob/master/docs/installation.md并按照所有步骤操作。我获得Google API并将其放入AndroidManifest。我的Google Play服务版本是14.5

    • 问题内容: 对于这两个进口; 我收到此错误: 如何解决此错误? 问题答案: 该错误是由您的Eclipse配置引起的。您可以将其减少为警告。更好的是,使用不属于非公共API的Base64编码器。Apache Commons有一个,或者当您已经使用Java 1.8时,请使用。

    • 我已将我的项目更新为JDK 8。 这对于IOS来说很好,但是当为Android构建时,会发生以下错误。 构建失败 /home/ec2-user/Android-SDK/tools/ant/build . XML:871:无法读取[/tmp/build 1790297227904368708 XXX/Main/libs/user classes . jar](无法处理类[generated/stat

    • 我在写Fizz Buzz的时候遇到了一个意想不到的互动。如果我执行