这是函数的定义,在CWGetEthernetDoc类中static void call_back(u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content);函数的实现
void CWGetEthernetDoc::call_back(u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content)
{
    CaptureTime=ctime((const time_t*) &packet_header->ts.tv_sec);
}
变量CaptureTime在CWGetEthernetDoc类中定义,为publicchar *CaptureTime;因为这是一个静态函数,所以一编译就出现:
error C2597: illegal reference to data member 'CWGetEthernetDoc::CaptureTime' in a static member function
执行 cl.exe 时出错.该怎么解决。thunk技术我不会。。

解决方案 »

  1.   

    static void call_back(CWGetEthernetDoc& obj, u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content);函数的实现
    void CWGetEthernetDoc::call_back(CWGetEthernetDoc& obj,u_char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content)
    {
        obj.CaptureTime=ctime((const time_t*) &packet_header- >ts.tv_sec);
      

  2.   

    如果这个call back函数的参数固定了,不能添加一个obj了,那么就把CaptureTime也做成一个静态的变量。
      

  3.   

    3楼
    将CaptureTime设置为静态的变量好象行不通。
    1楼
    这个OBJ是新建的CWGetEthernetDoc还是原来初始化建立的实例?
    如果是原来初始化时建立的实例,请问在那里找到实例名,我还算是新学VC。。
    谢谢
      

  4.   

    你的这个函数是由谁来调用的?
    要是单文档的程序,可以在函数里面得到这个Document
    CMainFrame * pFrame = (CMainFrame*)theApp.GetMainWnd();
    CXXXDoc * pDoc = pFrame->GetActiveView()->GetDocument();
      

  5.   

    首先你是静态函数因为没有this指针。。所以你修改成员变量肯定要报错。。除非你把那个变量也定义为静态的
    有种方法可以帮你
    向MainFrame发送消息。。然后通过它调用document来修改你说要改的那个值
    如果不知道怎么操作再给你解决
      

  6.   

    5楼的方法不行,
    我在静态函数CALL_BACK里面定义CMainFrame *pFrame;
    结果报告说:
    error C2065: 'CMainFrame' : undeclared identifier
    error C2065: 'Frame' : undeclared identifier
    warning C4552: '*' : operator has no effect; expected operator with side-effect
    7楼的朋友说说怎么操作的。
    我想在这个静态函数里面获得文档(DOC)的指针,因为我的大部分变量都是在DOC里面定义的,然后在这个静态函数里面要被操作,获得了DOC的指针,大部分问题都可以被解决掉了。谢谢不吝赐教