微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

int类型的符号不匹配时出现g ++错误消息

如何解决int类型的符号不匹配时出现g ++错误消息

如果我仅从示例程序开始,这是最简单的。 (注意:我的问题不是有关如何解决此程序的。如果您的回答仅是有关解决该问题的方式,而又不是我的问题,请不要回答。)

void f(int &x) { x = 1; }

int main(int,char **)
{
  unsigned int x;

  f(x);

  return 0;
}

当然,这里的问题是f希望采用 signed int作为参考,而我试图将其传递为 unsigned int

但是,来自g ++的编译器警告令人迷惑:

<source>: In function 'int main(int,char**)':

<source>:7:5: error: cannot bind non-const lvalue reference of type 'int&' to an rvalue of type 'int'

    7 |   f(x);

      |     ^

<source>:1:13: note:   initializing argument 1 of 'void f(int&)'

    1 | void f(int &x) { x = 1; }

      |        ~~~~~^

万一出现在屏幕侧面并且您不想滚动,则错误消息是“无法将类型为'int&'的非常量左值引用绑定到类型为'int'的右值” >

我的最佳猜测是,它试图将unsigned int类型的左值隐式转换为int类型的右值,然后卡住。但是为什么它会在尝试的一半时报告结果呢?为什么不在这里在任何地方报告unsigned int类型?

c声明显更有用:

<source>:7:3: error: no matching function for call to 'f'

  f(x);

  ^

<source>:1:6: note: candidate function not viable: no kNown conversion from 'unsigned int' to 'int &' for 1st argument

void f(int &x) { x = 1; }

问题:这是怎么回事?我认为编译器必须尝试进行转换以查看它是否有帮助并失败,但是在该过程中途发出错误消息并且不引用原始类型是没有意义的。

解决方法

您必须将unsigned int的地址传递给function

void f(int *x) { *x = 1; }

int main(int,char **)
{
  unsigned int x;

  f(&x);

  return 0;
}

此函数在传递unsigned int时仍会给您一个错误,因为该函数仅接受int

,

您不能将其他数据类型的地址传递给函数。

在发送指针地址之前,必须将其指针类型转换为unsigned int

void f(int *x) { *x = 1; }

int main(int,char **)
{
    unsigned int x;

    f(reinterpret_cast<int *>(&x));

    return 0;
}

OR

void f(int &x) { x = 1; }

int main(int,char **)
{
    unsigned int x;

    f((int&)x);

    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。