如何解决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 举报,一经查实,本站将立刻删除。