Большой неожиданный буф u16_t

У меня есть функция C, которая вызывает указатель на функцию (с указателем на буф и размер буфера)

printf("------------------------------\n");
printf("lengh of DATA_output = %zu\n", p->tot_len);
(*myStr.OnSendData)(buf, p->tot_len);
printf("------------------------------\n");

указатель на функцию, определенную как

typedef void (*pOnSendData)(void *buf, u16_t len);

Тогда мой настоящий метод класса C ++ получает его через этот указатель:

void Someclass::myPOnSendData(void *buf, u16_t len) {
std::cout << " Someclass::mypOnSendData len = " << (int)len << std::endl;
//Do something
}

Проблема в том, что len из buf довольно большой

вывод:

------------------------------
lengh of DATA_output = 42
------------------------------

Someclass::myPOnSendData len = 50512

Как это может быть?

0

Решение

Вы говорите, что myPOnSendData не является статической функцией-членом, но вы пытаетесь присвоить ей указатель в C-указатель на функцию. Это не сработает, потому что указатели на функции в стиле C не поддерживают нестатические функции-члены.

Если вы измените функцию на статическую, она будет совместима с типом указателя.

Обратите внимание, что поскольку типы в настоящее время несовместимы, вы, вероятно, получили сообщение об ошибке при попытке назначить указатель функции, и вам пришлось выполнить приведение, чтобы обойти его. Не делайте этого, поскольку вы просто скрываете ошибку, а не решаете ее.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector