收到错误:无法使用类型为'int'的右值的地址

耶胡达斯

我试图用新的编译器编译旧代码,并得到下一个错误:

error: cannot take the address of an rvalue of type 'int'

这是有两行的示例-一行编译,另一行给出错误

struct mstct {
    int myfield;
    int myfield2[5];
    int myfield3[5];
};

typedef struct mstct db_data_px;

int foo(int a, int b, int c){

  //the next code compiles successfully.
  unsigned val1 = ((18 == c) ? ((unsigned) & (((db_data_px *) 0)->myfield)) : ((unsigned) & (((db_data_px *) 0)->myfield3[b]))); //successes


  //the next code is failing
  unsigned val2 = (unsigned) & ((18 == c) ? (((db_data_px *) 0)->myfield) : (((db_data_px *) 0)->myfield3[b]));
  return 0; // failing
}

为什么第一行编译而第二行失败?为什么我需要在两个select表达式中都进行强制转换(无符号),并且仅在对select表达式求值后才进行强制转换?

苏拉夫·戈什(Sourav Ghosh)

在你的代码中

   ((18 == c) ? (((db_data_px *) 0)->myfield) : (((db_data_px *) 0)->myfield3[b]))

是不产生左值的条件表达式。

上面的表达式为您提供了一个右值(non-lvaue),您不能&在该值上使用operator。

详细说C11一下,引用标准第6.5.3.2节“地址和间接操作符”

一元运算&的操作数应该是函数指定符,[]一元运算*或一元运算的结果,或者是指定不是位字段且未用register存储类说明符声明的对象的左值

OTOH,关于条件运算符的结果类型,第6.5.15章,脚注

条件表达式不产生左值。

试想一下,&5不可能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

访问我的 NSMutableArray 时,我收到一条错误消息,例如“无法使用类型为 'id' 的右值来初始化类型为 'int' 的变量”

错误无法初始化右值类型为'int'的类型为'int *'的参数

无法使用索引类型为((Int,()->())'的下标类型[[xxx]]的值

无法将类型为'int&'的非常量左值引用绑定到类型为'int'的右值

Swift:无法为“ int”类型的值分配“ int”类型的值?错误

无法初始化类型为'int'的右值的'designFlags'类型的变量

错误“无法将类型为“ int”的值转换为预期的参数类型为“ UInt”

我收到此错误消息并了解原因:无法应用于给定类型;必需:未找到增强值:int,int

无法为类型为[Int]的类型为[[NSIndexPath]]的值下标

无法为索引类型为int的[CLPlacemark]类型的值下标

无法分配类型为'MDLMaterialProperty ?!'的值 到'Int'类型的值

C++ 链表错误:获取右值地址 [-fpermissive]

无法使用类型为“(Int?)”的参数列表调用类型“String”的初始值设定项

尽管未使用布尔值,但我收到“类型不匹配无法从int转换为布尔值”

无法下标'[(String)]类型的值?索引类型为“ Int”

无法将类型“ IndexPath”的值分配为类型“ Int”

Android-NDK-C ++-无法使用'jlong *'类型的右值初始化'int *'类型的变量(又名'long long *')

void* 地址的 int* 值

冬眠 PSQLException:类型为int的值错误:admin

类型为int的算术溢出错误,值= 4957500001.400178

无法下标[AnyObject]的值?索引类型为Int

Swift 4:无法为类型为'String'的值下标为'CountablePartialRangeFrom <Int>'类型的索引

快速操场中的错误:无法将类型“Int”的值分配给类型“[Int]”

无法将类型为int的值分配给类型为node的实体

“类型为'int'的右值的类型为'int&'的非常量引用的无效初始化”:递归引用传递函数

无法将类型“ Int”的值分配给类型“ Int?”

错误:无法获取“void”类型的右值的地址。两个具有相同工作流程的类,但一个抛出错误

错误:无法使用“布尔”类型的右值初始化“类型*”类型的返回对象

无法转换类型为“任何对象!”的值 到预期的参数类型“ Int”