decayer23 Ответов: 2

ошибка C4430: отсутствует спецификатор типа - предполагается int. Примечание: C++ не поддерживает default-int


У этой ошибки от main() нужна помощь! :(


#include "stdafx.h"
#include <pcap.h>


/* 4 bytes IP address */
typedef struct ip_address{
    u_char byte1;
    u_char byte2;
    u_char byte3;
    u_char byte4;
}ip_address;

/* IPv4 header */
typedef struct ip_header{
    u_char  ver_ihl;        // Version (4 bits) + Internet header length (4 bits)
    u_char  tos;            // Type of service 
    u_short tlen;           // Total length 
    u_short identification; // Identification
    u_short flags_fo;       // Flags (3 bits) + Fragment offset (13 bits)
    u_char  ttl;            // Time to live
    u_char  proto;          // Protocol
    u_short crc;            // Header checksum
    ip_address  saddr;      // Source address
    ip_address  daddr;      // Destination address
    u_int   op_pad;         // Option + Padding
}ip_header;

/* UDP header*/
typedef struct udp_header{
    u_short sport;          // Source port
    u_short dport;          // Destination port
    u_short len;            // Datagram length
    u_short crc;            // Checksum
}udp_header;

/* prototype of the packet handler */
void packet_handler(u_char *param, const struct pcap_pkthdr *header, const u_char *pkt_data);


main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
int inum;
int i=0;
pcap_t *adhandle;
char errbuf[PCAP_ERRBUF_SIZE];
u_int netmask;
char packet_filter[] = "ip and udp";
struct bpf_program fcode;

    /* Retrieve the device list */
    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL, &alldevs, errbuf) == -1)
    {
        fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
        exit(1);
    }
    
    /* Print the list */
    for(d=alldevs; d; d=d->next)
    {
        printf("%d. %s", ++i, d->name);
        if (d->description)
            printf(" (%s)\n", d->description);
        else
            printf(" (No description available)\n");
    }

    if(i==0)
    {
        printf("\nNo interfaces found! Make sure WinPcap is installed.\n");
        return -1;
    }

Sergey Alexandrovich Kryukov

В какой строке кода? Неважно, найдите эту строку и фактически объявите переменную с соответствующим типом.
—СА

Volynsky Alex

Не смотрите объявление класса pcap_if_t....
Попробуйте добавить объявление класса перед основной функцией...
Например:

класс pcap_if_t;


П. С. Главное должна возвращать int

2 Ответов

Рейтинг:
7

Jochen Arndt

Ошибка указывает на отсутствующий тип возвращаемого значения main() функция. Потому что main() должны вернуть int, использовать:

int main()
{
    // ...
    return 0;
}


decayer23

Это ошибка, которую я имел после ввода int main()

ошибка lnk2019: неразрешенных внешних символ "пустота как __cdecl packet_handler(без знака типа char *,структуры struct pcap_pkthdr как const *,без знака char const и *)" (?packet_handler@@YAXPAEPBUpcap_pkthdr@@ПБЭ@з) ссылка в функции _main

Jochen Arndt

Это еще одна ошибка, которая была введена позже (мой ответ на первоначальный вопрос). Вы не должны редактировать свои вопросы таким образом, чтобы контекст ответов мог быть потерян.

Однако ошибка исходит от компоновщика, сообщающего вам, что он не может найти функцию packet_handler() в объектных файлах (созданных путем компиляции исходных файлов) или библиотеке.

PrafullaVedante

добавлять.lib-файл, в котором функция packet_handler находится в пути компоновщика .....

Для visual studio вы должны добавить .lib-файл в настройках проекта-->Linker--->Input

decayer23

извините за это, это моя первая публикация, и вы знаете, какой файл .lib я должен добавить? У меня есть wpcap.lib и пакет.lib уже находится в проекте ввода компоновщика.

Jochen Arndt

Это функция обработчика, которая должна быть реализована вами. Ваш код выглядит так же, как и те, из http://www.winpcap.org/docs/docs_41b5/html/group__wpcap__tut3.html-да. Так что просто добавьте функцию, как это сделано там.

decayer23

Спасибо. У меня получилось! :Д

Рейтинг:
16

CPallini

Цитата:
главный()

должно быть
int main()