已经添加了相关的头文件,为什么不能在.h文件中定义变量,错误:缺少类型说明符

时间:2020-12-12 03:41:04
如题。
MFC中的DLG.h文件里我想增加一个全局变量sock,已经包含进去了“sock.h”文件,但是运行时告诉我错误,缺少类型说明符。源码如下:// simpleSMTPDlg.h : 头文件
//
#pragma once
#include "afxwin.h"
#include "simpleSMTPsock.h"

// CsimpleSMTPDlg 对话框
class CsimpleSMTPDlg : public CDialogEx
{
// 构造
public:
CsimpleSMTPDlg(CWnd* pParent = NULL); // 标准构造函数

simpleSMTPsock Mysock;
CString m_serverdiary;
CString m_mailcontext;
CStatic bmp;
// 对话框数据
enum { IDD = IDD_SIMPLESMTP_DIALOG };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持


// 实现
protected:
HICON m_hIcon;

// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CEdit m_server;
CEdit m_mail;
};

7 个解决方案

#1


你的sock.h文件如何定义的?

#2


DLG.h与simpleSMTPsock.h什么关系?
CsimpleSMTPDlg 这个类的头文件是simpleSMTPsock.h吗?
DLG.h在什么地方被#include的?stdafx.h里面?

#3


sock.h是基于CAsyncSocket类的一个套接字,里面我只重载了函数receive()和accept().
DLG.h是基于对话框的。

#4


我想你是定义错误或不知道Socket如何定义,请参考实例

#pragma once

class CCommThread;

// CMySocket 命令目标
class CMySocket : public CSocket
{
public:
CMySocket();
virtual ~CMySocket();

public:
void GetDlg(CCommThread * dlg);
CCommThread* m_dlg;

virtual void OnConnect(int nErrorCode);
virtual void OnReceive(int nErrorCode);
virtual void OnClose(int nErrorCode);
};

引用处

#pragma once

#include "MySocket.h"

class CRWFlash;

// CCommThread
// 通信线程

class CCommThread : public CWinThread
{
DECLARE_DYNCREATE(CCommThread)

protected:
CCommThread();           // 动态创建所使用的受保护的构造函数
virtual ~CCommThread();
……

private:
// SOCKET类
CMySocket *m_ClientSocket;
……
};

#5


有可能。是用MFC自动生成的,最后因为着急交,于是我重新建了个工程以后就好了。感谢。

#6


你的simpleSMTPsock类又是如何定义的呢?

#7


#pragma once
#include "simpleSMTPDlg.h"
// simpleSMTPsock 命令目标

class simpleSMTPsock : public CAsyncSocket
{
public:
simpleSMTPsock();
virtual ~simpleSMTPsock();
virtual void OnReceive(int nErrorCode);
virtual void OnAccept(int nErrorCode);
CString data;
bool Isdata;
bool Quit;
bool Isbmp;
CString attachment;
CString dlgdir, serverdiary;//对话框之前的已经记录的日志和即将要生成的日志
};

#1


你的sock.h文件如何定义的?

#2


DLG.h与simpleSMTPsock.h什么关系?
CsimpleSMTPDlg 这个类的头文件是simpleSMTPsock.h吗?
DLG.h在什么地方被#include的?stdafx.h里面?

#3


sock.h是基于CAsyncSocket类的一个套接字,里面我只重载了函数receive()和accept().
DLG.h是基于对话框的。

#4


我想你是定义错误或不知道Socket如何定义,请参考实例

#pragma once

class CCommThread;

// CMySocket 命令目标
class CMySocket : public CSocket
{
public:
CMySocket();
virtual ~CMySocket();

public:
void GetDlg(CCommThread * dlg);
CCommThread* m_dlg;

virtual void OnConnect(int nErrorCode);
virtual void OnReceive(int nErrorCode);
virtual void OnClose(int nErrorCode);
};

引用处

#pragma once

#include "MySocket.h"

class CRWFlash;

// CCommThread
// 通信线程

class CCommThread : public CWinThread
{
DECLARE_DYNCREATE(CCommThread)

protected:
CCommThread();           // 动态创建所使用的受保护的构造函数
virtual ~CCommThread();
……

private:
// SOCKET类
CMySocket *m_ClientSocket;
……
};

#5


有可能。是用MFC自动生成的,最后因为着急交,于是我重新建了个工程以后就好了。感谢。

#6


你的simpleSMTPsock类又是如何定义的呢?

#7


#pragma once
#include "simpleSMTPDlg.h"
// simpleSMTPsock 命令目标

class simpleSMTPsock : public CAsyncSocket
{
public:
simpleSMTPsock();
virtual ~simpleSMTPsock();
virtual void OnReceive(int nErrorCode);
virtual void OnAccept(int nErrorCode);
CString data;
bool Isdata;
bool Quit;
bool Isbmp;
CString attachment;
CString dlgdir, serverdiary;//对话框之前的已经记录的日志和即将要生成的日志
};