+ -
当前位置:首页 → 问答吧 → 提示“未定义”

提示“未定义”

时间:2011-12-01

来源:互联网

一、为Dialog类添加了一个成员变量SOCKET类型的成员变量“m_socket”。
  1、在“ChatDlg.h”头文件中,如下:
  private:
SOCKET m_socket;
   
  2、在“ChatDlg.cpp”中使用时:
  //创建套接字
  m_socket=socket(AF_INET,SOCK_DGRAM,0);
问题一:这里提示
2 IntelliSense: identifier "m_socket" is undefined c:\users\administrator.pc-20110905onbv\desktop\demo\vc\dialog\chat\chat\chatdlg.cpp 167 2 Chat
头文件中都定义了,怎么还提示“未定义”呢???


二、为Dialog类“ChatDlg.cpp”,添加了一个方法
  1、// Implementation
  protected:
DECLARE_MESSAGE_MAP()
  public:
bool InitSocket(void);
  };
  ..........
  ..........
  ..........
  bool CAboutDlg::InitSocket(void)
  {


//创建套接字
m_socket=socket(AF_INET,SOCK_DGRAM,0);
if (INVALID_SOCKET==m_socket)
{
MessageBox(_T("套接字创建失败!"));
return FALSE;

SOCKADDR_IN addrSock;
addrSock.sin_family=AF_INET;
addrSock.sin_port=htons(6000);
addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);


int retval;
//绑定套接字
retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
if (SOCKET_ERROR==retval)
{
closesocket(m_socket);
MessageBox(_T("绑定失败!"));
return FALSE;
}
return TRUE;
}
  }
  2、在“OnInitDialog()”初始化使用使调用该方法
  // TODO: Add extra initialization here
//初始化套接字
InitSocket();
问题二:这是提示错误信息。
1 IntelliSense: identifier "InitSocket" is undefined c:\users\administrator.pc-20110905onbv\desktop\demo\vc\dialog\chat\chat\chatdlg.cpp 104 2 Chat

这时“InitSocket(void)”方法的声明是在“ChartDlg”实现类里面,而不是在它的头文件中,是不是要手动加上。

作者: starryos   发布时间: 2011-12-01

bool CAboutDlg::InitSocket(void)
改成
bool CChatDlg::InitSocket(void)

SOCKET m_socket;//在CChatDlg中定义

作者: hpf976149   发布时间: 2011-12-01

bool CAboutDlg::InitSocket(void)

作者: dingxz105090   发布时间: 2011-12-01

除了定义之外, 可能还要包含相应的库.

作者: shenzhentom   发布时间: 2011-12-01

Header Declared in Winsock2.h.
 
Library Link to Ws2_32.lib.
 

作者: shen_wei   发布时间: 2011-12-01

可能放到CAboutDialog中定义了

作者: Kaile   发布时间: 2011-12-01

做程序要细心。

作者: foxriver_gjg1989   发布时间: 2011-12-01

在对话框的OnInitDialog中加载套接字库,有的程序不需要这么做是因为它们在内部加载的,不过写在OnInitDialog中更明朗一些。

C/C++ code

    //加载套接字库
    WORD wVersionRequested;
    WSADATA wsaData;
    int nErr;

    wVersionRequested = MAKEWORD( 1, 1 );

    nErr = WSAStartup(wVersionRequested, &wsaData);
    if ( nErr != 0 ) 
    {
        return FALSE;
    }

    if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) 
    {
        WSACleanup();
        return FALSE; 
    }


作者: bazzi2011   发布时间: 2011-12-01