在树莓派上-arv7l我正在编译以下C ++程序
#include <iostream>
void fun(unsigned long int* i)
{
std::cout << *i << std::endl;
}
int main()
{
std::size_t i = 1;
fun(&i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于上面的代码,我得到以下错误:
a.cpp: In function 'int main()':
a.cpp:12:9: error: invalid conversion from 'std::size_t* {aka unsigned int*}' to 'long unsigned int*' [-fpermissive]
fun(&i);
^~
a.cpp:3:6: note: initializing argument 1 of 'void fun(long unsigned int*)'
void fun(unsigned long int* i)
^~~
Run Code Online (Sandbox Code Playgroud)
我了解在32位系统上,size_t是32位,可能与有所不同,unsigned long但仍应编译?
关于各种类型的大小:
sizeof(size_t): 4
sizeof(unsigned int): 4
sizeof(unsigned long int): 4
sizeof(size_t*): 4
sizeof(unsigned int*): 4
sizeof(unsigned long int*): 4
Run Code Online (Sandbox Code Playgroud)
系统:Linux turtlebot 4.14.79-v7 +#1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l GNU / Linux
编译器:gcc-6.3
Nat*_*ica 12
我了解在32位系统上,size_t是32位,可能与unsigned long不同,但是仍然可以编译吗?
这是不正确的。您正确地认为类型具有相同的大小,但是大小不是使类型成为类型的原因。举例来说,我们有signed char,unsigned char和char。这三个的大小均为1,但所有三个都是由标准命名的不同类型。
在您的情况下size_t*为a,unsigned int*并且由于与a的类型不同long unsigned int*,因此无法将其隐式转换为一个。
| 归档时间: |
|
| 查看次数: |
851 次 |
| 最近记录: |