我看到很多使用CSocket类的文件头都添加了CLASS的关键字,如class CMySocket;那他的作用是什么?为什么直接#include不行呢?
我的示例代码如下,我INCLUDE 了,CLASS了,可是编译器还是报告:error C2079: “CSockThread::ConSock”使用未定义的 class“CClientBlockSock”,这是为什么?
class CClientBlockSock;
#include "ClientBlockSock.h"
class CSockThread : public CWinThread
{
DECLARE_DYNCREATE(CSockThread)
public:
CSockThread();
CSockThread(SOCKET socket);
virtual ~CSockThread();
protected:
CClientBlockSock ConSock;
SOCKET m_hSocket;
}
我的示例代码如下,我INCLUDE 了,CLASS了,可是编译器还是报告:error C2079: “CSockThread::ConSock”使用未定义的 class“CClientBlockSock”,这是为什么?
class CClientBlockSock;
#include "ClientBlockSock.h"
class CSockThread : public CWinThread
{
DECLARE_DYNCREATE(CSockThread)
public:
CSockThread();
CSockThread(SOCKET socket);
virtual ~CSockThread();
protected:
CClientBlockSock ConSock;
SOCKET m_hSocket;
}
解决方案 »
- 【【【【怎样绘制MFC控件的皮肤,例listbox.listcontrol】】】】
- 怎样修改单文档的客户区、菜单栏、工具栏的背景颜色(绿色)
- vc 拖动图标
- 获取网页时为什么是乱码? 网页是GB2312编码
- 如何在对话框中实现系统菜单中的保存和打开
- 可以销售自己制作的软件光盘吗?
- 郁闷 : 头文件冲突了,怎么办 ?谁在前,谁在后,大家帮忙!
- 在单文档里怎么加listctrl?
- visual assistX的一个问题
- 在程序内部,我如何取得鼠标下的词,即进程内的鼠标取词
- 在一个多项目的程序中,如果一个项目下的文件需要用到另一个项目下某个文件的全局变量如何调用
- 请教:vs.net(中文版)应该含有vfp7,可我安装后却没有,只有vb,vc,vc++,vc#,是否安装不对?应如何安装?
应该就可以了。
{
DECLARE_DYNCREATE(CSockThread)
public:
CSockThread();
CSockThread(SOCKET socket);
virtual ~CSockThread();
protected:
CClientBlockSock ConSock;
SOCKET m_hSocket;
}; <-- 这里看了你的代码,发现你在class定义的最后,没有加上“;”;看看你的ClientBlockSock.h中class的定义,是不是这里的问题?还有,把第一行去掉!!!
如果去掉CLASS 语句,将会出现以下错误:
: error C2146: 语法错误 : 缺少“;”(在标识符“ConSock”的前面)
error C2501: “CSockThread::CClientBlockSock” : 缺少存储类或类型说明符
error C2501: “CSockThread::ConSock” : 缺少存储类或类型说明符
在后面NEW 一下,编译连接通过。为什么?(去掉CLASS语句仍然会出现错误)
UP!!!!!!!!
CClientBlockSock ConSock;
那么编译器要为Consock分配内存,此时必须知道CClientBlockSock的具体定义,因此要头文件中么用#include "ClientBlockSock.h"。如果用
CClientBlockSock * Consock;则无需分配内存,头文件中用
class CClientBlockSock;
就可以了,但是要在cpp文件中#include "ClientBlockSock.h"你这里只能在头文件中加上
#include "ClientBlockSock.h"
这两句其实是不用一起存在的.
{
...
C*1 c1;
};class C*1
{
...
C*2 c2;
};就可以了。