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
, просто удалите оператор &
. Если ваш тип возврата совершенно другой, вы должны переосмыслить, что вы делаете.
Итак, ваш 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
).
вам нужно решить, хотите ли вы вернуть значение measurements[address]
или его указатель!
Xcp_Addr_t
?