有一程序,已定义
public:
CSmtp(LPCTSTR szSMTPServerName, UINT nPort=SMTP_PORT);
private:
        UINT m_nPort;
        CString m_sSMTPServerHostName;
且,
CSmtp::CSmtp(LPCTSTR szSMTPServerName, UINT nPort)
{
ASSERT(szSMTPServerName != NULL);
AfxSocketInit();
m_sSMTPServerHostName=szSMTPServerName;
m_nPort =nPort;
m_bConnected = FALSE;
m_sError = _T("OK");
response_buf = NULL;
}编译时没有问题,但运行时发现m_nPort和m_sSMTPServerHostName没有被付值,请问是什么原因??

解决方案 »

  1.   

    初始化时正确吗?应该没什么问题的.CSmtp::CSmtp(LPCTSTR szSMTPServerName, UINT nPort)
    改成CSmtp::CSmtp(LPCTSTR &szSMTPServerName, UINT &nPort)试一试.
      

  2.   

    你的问题就是出现在没有执行构造函数,不信,你调试。下面是跟构造函数,析构函数调用有关的说明,我想对你有帮助。Cmyclass myclass; 表示已经生成了这个空间,会执行他的构造函数,
    离开定义域后,会执行析构函数。Cmyclass * myclass=new Cmyclass();
    可以分成两步:
    Cmyclass * myclass;  // (1)
    myclass=new Cmyclass();  // (2)
    第一步只是定义,没有生成这个类的空间,如果此时去访问这个类的成员函数或者修改
    它的成员变量,会出现错误(没有空间,怎么可能访问?)
    第二步:生成了空间,可以访问了,并且执行构造函数,
    只有在delete myclass的时候,才会执行析构函数。