uint32 measurements [32];
Xcp_Addr_t XcpApp_ConvertAddress( uint32 address, uint8 extension )
{
return &measurements[address]; //return from incompatible pointer type
}
地址是我从客户端收到的值(例如:0,1,2 .....)。上述功能是将测量地址返回给其他内部功能。我收到如下警告:
return from incompatible pointer type
谁能告诉我如何解决这个问题?
答案 0 :(得分:1)
这一切都取决于Xcp_Addr_t
的类型。你的表达是:&measurements[address]
。表达式的类型可转换为uint32*
。如果您的回复类型是伪装的uint32
,那么只需删除&
运算符即可。如果您的退货类型完全不同,您需要重新考虑您正在做的事情。
所以你的typedef是:
typedef uint8* Xcp_Addr_t;
正如您所看到的那样uint8*
(返回类型)和uint32*
(实际返回值的类型)不匹配。您可以将返回类型或数组measurements
的类型更改为:
uint8 measurements[32];
好的,所以你要确保XcpApp_ConvertAddress
返回一个有效的指针(不超出界限)。你有两个选择:
您可以通过执行以下操作来断言:
assert(address < 32);
return &measurements[address];
在这种情况下,如果传递给函数的地址不正确,程序将在运行时失败(请注意,您必须添加#include <cassert>
才能使用assert
)。
或者你可以抛出异常:
if (address < 32) throw std::runtime_error("out of bounds");
return &measurements[address];
(请注意#include <stdexcept>
}需要std::runtime_error
。
答案 1 :(得分:0)
你必须决定是否要返回measurements[address]
或其指针的值!