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
谁能告诉我如何解决这个问题?
最佳答案
这完全取决于 Xcp_Addr_t
的类型.你的表达是:&measurements[address]
.表达式的类型可转换为 uint32*
.如果您的返回类型是 uint32
伪装,然后只需删除 &
运算符(operator)。如果你的返回类型完全不同,你要重新考虑你在做什么。
所以你的 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
)。
关于c++ - c 中不兼容的指针类型警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22220952/