class CMySnifferDlg : public CDialog
{............
public:
 static SOCKET SockRaw;
     static void CheckSockError(int iErrorCode,char *pErrorMsg);
static UINT StartSniff(LPVOID pParam);
}线程函数StartSniff做成了类成员了,所以用了static它涉及的一个变量SockRaw也弄成staticAfxBeginThread(StartSniff,(LPVOID)this); UINT CMySnifferDlg::StartSniff(LPVOID pParam)
{
    //////////////////////////////
SockRaw=socket(AF_INET,SOCK_RAW ,IPPROTO_IP);  
.......
}
但编译时出错MySnifferDlg.obj : error LNK2001: 无法解析的外部符号 "public: static unsigned int CMySnifferDlg::SockRaw" (?SockRaw@CMySnifferDlg@@2IA)
Debug/MySniffer.exe : fatal error LNK1120: 1 个无法解析的外部命令
嘛毛病????谢谢

解决方案 »

  1.   

    static变量需要类外定义
    放cpp里去吧
      

  2.   

    SockRaw变量不用弄成静态的。
    启动线程时AfxBeginThread(StartSniff,(LPVOID)this),把this指针当参数传了进去,线程里可直接调用类的公有变量和函数。静态变量需要类外定义,即
    SOCKET CMySnifferDlg::SockRaw = INVALID_SOCKET;
      

  3.   

    静态变量中类定义中是声明,还要在CPP文件中定义和初始化
      

  4.   

    SOCKET CMySnifferDlg::SockRaw = INVALID_SOCKET;
    为什么这句话我写在cpp的最外面,就不报错,
    但写在UINT CMySnifferDlg::StartSniff(LPVOID pParam)函数实现的里边就告诉我
    SockRaw被重定义??
      

  5.   

    同 wltg2001只在类中声明 static Type Var;还不够,还没有实体需要Type Class::Var = InitVal;