LINUX.ORG.RU

ошибка в компиляции

 ,


0

1

пишет

Error:(73, 16) error: member access into incomplete type 'struct icmphdr'
Error:(84, 41) error: invalid application of 'sizeof' to an incomplete type 'struct icmphdr'
Если я в консоли на c++ скомпилирую, то всё нормально работает. Но если в android studio, то пишет такую ошибку, вот часть кода, где ошибка.
struct icmphdr *icmp_packet;

    char *buffer = ( char * ) calloc ( 128, 1 );
    icmp_packet = ( struct icmphdr * ) &buffer[0];

    int icmp_len = 8 + 56;
    icmp_packet->type = ICMP_ECHO;
    icmp_packet->code = 0;
    icmp_packet->checksum = 0;
    icmp_packet->un.echo.sequence = seq++;
    icmp_packet->un.echo.id = getpid ( );
    icmp_packet->checksum = get_checksum ( ( unsigned short *) icmp_packet, icmp_len );

Где здесь С++, u0atgKIRznY5?

Ну да ладно, скорее всего в твоем .c (или .cpp файле) не включен необходимый заголовок. Походу вот это тебе надо:

#include <netinet/ip_icmp.h>

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от KennyMinigun

Он включен, я же писал что он компилируется на c++, но только не в android studio. Из c++ в android studio я использую только std::string, которой делаю ips += «* »; и тому подобное. Чтобы потом передать строку java коду.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от KennyMinigun

Все поля icmphdr подсвечены красным, это может что-то значить, например что названия полей другие? Щас через adb зайду посмотрю.

u0atgKIRznY5
() автор топика
Ответ на: комментарий от KennyMinigun

названия структуры и полей отличается, вот как выглядит правильно.

struct icmp *icmp_packet;

static void send_request ( )
{
    struct ip *ip;

    char *buffer = ( char * ) calloc ( 128, 1 );
    icmp_packet = ( struct icmp * ) &buffer[0];

    int icmp_len = 8 + 56;
    icmp_packet->icmp_type = ICMP_ECHO;
    icmp_packet->icmp_code = 0;
    icmp_packet->icmp_cksum = 0;
    icmp_packet->icmp_hun.ih_idseq.icd_seq = seq++;
    icmp_packet->icmp_hun.ih_idseq.icd_id = getpid ( );
    icmp_packet->icmp_cksum = get_checksum ( ( unsigned short *) icmp_packet, icmp_len );

u0atgKIRznY5
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.