普通類成員變量是無法作為 回調(diào)函數(shù)的,原因就是C++會給類增加一個隱含的參數(shù)變量this指針.
這也就是你的類成員函數(shù) ethernet_protocol_packet_callback 出問題的原因.
解決辦法:
1.不要用類成員函數(shù)來做回調(diào)函數(shù).這個估計和你的封裝到類中的初衷不符.
2.把ethernet_protocol_packet_callback 加static變成靜態(tài)函數(shù).不過靜態(tài)成員函數(shù)只能訪問靜態(tài)成員變量,這一點你也要注意一下.如果訪問了非靜態(tài)成員變量,則還會編譯失敗.
如果一定要訪問對象的其他非靜態(tài)成員變量,可以給類增加一個靜態(tài)的指針,類型為類本身的類型,并且在類對象的構(gòu)造函數(shù)中初始化它指向類對象,這樣就可以訪問類對象的所有成員了.
None of the functions with this name in scope match the target type
None of the functions with this name in scope match the target type
class CPacketscapturedDlg :public CDialog
{
public:
CPacketscapturedDlg(CWnd* pParent = NULL);
void ethernet_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr*
packet_header,const u_char *packet_content);
void ip_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr
*packet_header,const u_char* packet_content);
void arp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const
u_char * packet_content);
void icmp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *
packet_header,const u_char * packet_content);
void udp_protocol_packet_callback(u_char * argument,const struct pcap_pkthdr *
packet_header,const u_char * packet_content);
void tcp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const
u_char *packet_content);
void go_capture();
}
void CPacketscapturedDlg::ethernet_protocol_packet_callback(u_char *argument,const struct
pcap_pkthdr* acket_header,const u_char *packet_content){}
void CPacketscapturedDlg::ip_protocol_packet_callback(u_char *argument,const struct
pcap_pkthdr *packet_header,const u_char* packet_content){}
void CPacketscapturedDlg::arp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr
*packet_header,const u_char * packet_content){}
void CPacketscapturedDlg::icmp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr * packet_header,const u_char * packet_content){}
void CPacketscapturedDlg::udp_protocol_packet_callback(u_char * argument,const struct pcap_pkthdr * packet_header,const u_char * packet_content){}
void CPacketscapturedDlg::tcp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const u_char *packet_content){}
void CPacketscapturedDlg::go_capture()
{
pcap_t *pcap_handle;
u_char *pkt_data;
char error_content[PCAP_ERRBUF_SIZE];
char *net_interface;//網(wǎng)絡(luò)接口
struct bpf_program bpf_filter;//過濾規(guī)則
char bpf_filter_string[]="";
bpf_u_int32 net_mask;//網(wǎng)絡(luò)掩碼
bpf_u_int32 net_ip;//網(wǎng)絡(luò)地址
net_interface=pcap_lookupdev(error_content);//獲得網(wǎng)絡(luò)接口
pcap_lookupnet(net_interface,&net_ip,&net_mask,error_content);//獲得網(wǎng)絡(luò)地址和網(wǎng)絡(luò)掩碼
pcap_handle=pcap_open_live(net_interface,BUFSIZ,1,0,error_content);//打開網(wǎng)絡(luò)接口
pcap_compile(pcap_handle,&bpf_filter,bpf_filter_string,0,net_ip);
if(pcap_datalink(pcap_handle)!=DLT_EN10MB)
return;
pcap_loop(pcap_handle,-1,ethernet_protocol_packet_callback,NULL);//回調(diào)函數(shù)的方式捕獲數(shù)據(jù)包
pcap_close(pcap_handle);
}
void CPacketscapturedDlg::OnCapture()
{
go_capture();
}
編譯出現(xiàn)如下的錯誤:'pcap_loop' :cannot convert parameter 3 from 'void (unsigned char *,const struct pcap_pkthdr *,const unsigned char *)' to 'void (__cdecl *)(unsigned char *,const struct pcap_pkthdr *,const unsigned char *)'
None of the functions with this name in scope match the target type
class CPacketscapturedDlg :public CDialog
{
public:
CPacketscapturedDlg(CWnd* pParent = NULL);
void ethernet_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr*
packet_header,const u_char *packet_content);
void ip_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr
*packet_header,const u_char* packet_content);
void arp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const
u_char * packet_content);
void icmp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *
packet_header,const u_char * packet_content);
void udp_protocol_packet_callback(u_char * argument,const struct pcap_pkthdr *
packet_header,const u_char * packet_content);
void tcp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const
u_char *packet_content);
void go_capture();
}
void CPacketscapturedDlg::ethernet_protocol_packet_callback(u_char *argument,const struct
pcap_pkthdr* acket_header,const u_char *packet_content){}
void CPacketscapturedDlg::ip_protocol_packet_callback(u_char *argument,const struct
pcap_pkthdr *packet_header,const u_char* packet_content){}
void CPacketscapturedDlg::arp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr
*packet_header,const u_char * packet_content){}
void CPacketscapturedDlg::icmp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr * packet_header,const u_char * packet_content){}
void CPacketscapturedDlg::udp_protocol_packet_callback(u_char * argument,const struct pcap_pkthdr * packet_header,const u_char * packet_content){}
void CPacketscapturedDlg::tcp_protocol_packet_callback(u_char *argument,const struct pcap_pkthdr *packet_header,const u_char *packet_content){}
void CPacketscapturedDlg::go_capture()
{
pcap_t *pcap_handle;
u_char *pkt_data;
char error_content[PCAP_ERRBUF_SIZE];
char *net_interface;//網(wǎng)絡(luò)接口
struct bpf_program bpf_filter;//過濾規(guī)則
char bpf_filter_string[]="";
bpf_u_int32 net_mask;//網(wǎng)絡(luò)掩碼
bpf_u_int32 net_ip;//網(wǎng)絡(luò)地址
net_interface=pcap_lookupdev(error_content);//獲得網(wǎng)絡(luò)接口
pcap_lookupnet(net_interface,&net_ip,&net_mask,error_content);//獲得網(wǎng)絡(luò)地址和網(wǎng)絡(luò)掩碼
pcap_handle=pcap_open_live(net_interface,BUFSIZ,1,0,error_content);//打開網(wǎng)絡(luò)接口
pcap_compile(pcap_handle,&bpf_filter,bpf_filter_string,0,net_ip);
if(pcap_datalink(pcap_handle)!=DLT_EN10MB)
return;
pcap_loop(pcap_handle,-1,ethernet_protocol_packet_callback,NULL);//回調(diào)函數(shù)的方式捕獲數(shù)據(jù)包
pcap_close(pcap_handle);
}
void CPacketscapturedDlg::OnCapture()
{
go_capture();
}
編譯出現(xiàn)如下的錯誤:'pcap_loop' :cannot convert parameter 3 from 'void (unsigned char *,const struct pcap_pkthdr *,const unsigned char *)' to 'void (__cdecl *)(unsigned char *,const struct pcap_pkthdr *,const unsigned char *)'
None of the functions with this name in scope match the target type
其他人氣:532 ℃時間:2020-04-07 14:52:15
優(yōu)質(zhì)解答
我來回答
類似推薦
- bacup the
- This activity helps students apply the target language to lives
- 不同質(zhì)量~密度的物體漂浮在水上,浮力是否一樣
- 某次數(shù)學考試五道題,全班52人參加,共做對181道,已知每人至少做對1道題,做對1道的有7人,5道全對的有6人,做對2道和3道的人數(shù)一樣多,那么做對4道的人數(shù)有多少人?
- 修一條公路,已修的是剩下的2倍,還剩3.8千米沒修,這條公路長多少千米?
- 英語翻譯
- 襯衣用英語怎么寫
- 客車和轎車同時從相距455千米的A.B兩個相向開出,轎車每小時行65千米,客車每小時行56千米,當橋車到達A地時,客車離B地還有多少千米?
- 英語take怎么讀
- 在0.85.7/8,85.1%,5/6這四個數(shù)中,最大的是( ),最小的是( ).
- 若P是橢圓x^2/a^2+y^2/b^2=1(a>b>0)上一點,F1、F2是左、右焦點,設(shè)角F1PF2=θ,求證S△F1PF2=(b^2)*tan(θ/2
- 有紅、黃、白三種顏色的小球各10個,混合放在一個布袋中,一次至少摸出_個,才能保證有5個小球是同色的.
猜你喜歡
- 1(1)學校買籃球,每個要a元,每個足球比籃球少5元 a-5表示_______________ 5a表示_________________
- 2測量食用油的密度:
- 3解方程(x²/9)+(16/x²)=(-10/3)(x/3-4/x)
- 4短時記憶的時間是?
- 5Ther was ____time ____Ihated to go to school.
- 6地球與宇宙怎么比?
- 7將鐵粉和銅粉置于硝酸銀和硝酸鋅的混合溶液中,待反應(yīng)完畢后,所得金屬中一定有( ?。?A.鋅 B.鐵和銀 C.銀 D.銀和銅
- 8一個分數(shù)的分子和分母的和是56,約分后是七分之一,原來這個分數(shù)是幾分之幾?
- 9新初一北師大版數(shù)學書196頁~197頁題
- 10將下面的句子換成成語
- 11-- can you tell me --- to travel to dalian? -- about two hour by plane
- 121 有兩筐同樣重的桔子,如果從第一筐中取出 15 千克放入第二筐,這時第一筐桔子的重量是第二筐的3/5.原來每筐桔子重多少千克?