>>class<<关键字的作用是什么?为什么INCLUDE 了还是无法使用他的类?我INCLUDE 了,CLASS了,他还说:error C2079: “CSockThread::ConS

eslea 2002-09-18 09:45:25
我看到很多使用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;
}
...全文
105 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
eslea 2002-09-18
  • 打赏
  • 举报
回复
我把CClientBlockSock ConSock;语句改成:CClientBlockSock* pConSock;
在后面NEW 一下,编译连接通过。为什么?(去掉CLASS语句仍然会出现错误)
UP!!!!!!!!
eslea 2002-09-18
  • 打赏
  • 举报
回复
不好意思,我只是截取了类声明的一部分,把“;”忘记了。
如果去掉CLASS 语句,将会出现以下错误:
: error C2146: 语法错误 : 缺少“;”(在标识符“ConSock”的前面)
error C2501: “CSockThread::CClientBlockSock” : 缺少存储类或类型说明符
error C2501: “CSockThread::ConSock” : 缺少存储类或类型说明符
RedFire 2002-09-18
  • 打赏
  • 举报
回复
class CSockThread : public CWinThread
{
DECLARE_DYNCREATE(CSockThread)
public:
CSockThread();
CSockThread(SOCKET socket);
virtual ~CSockThread();
protected:
CClientBlockSock ConSock;
SOCKET m_hSocket;
}; <-- 这里

看了你的代码,发现你在class定义的最后,没有加上“;”;看看你的ClientBlockSock.h中class的定义,是不是这里的问题?

还有,把第一行去掉!!!
everandforever 2002-09-18
  • 打赏
  • 举报
回复
#include "ClientBlockSock.h"
应该就可以了。
firmamenthy 2002-09-18
  • 打赏
  • 举报
回复
有些想法,但并不成熟,不知道对错,等过段时间验证了再说吧
eslea 2002-09-18
  • 打赏
  • 举报
回复
没有用的 :(
RedFire 2002-09-18
  • 打赏
  • 举报
回复
你把第一行的class CClientBlockSock去掉试一下。
eslea 2002-09-18
  • 打赏
  • 举报
回复
UP
everandforever 2002-09-18
  • 打赏
  • 举报
回复
你把两个类定义到同一个文件中,然后这样:

class C*1;

class C*2
{
...
C*1 c1;
};

class C*1
{
...
C*2 c2;
};

就可以了。

eslea 2002-09-18
  • 打赏
  • 举报
回复
谢谢,我基本上找到原因了。我的类是循环用的。就是类A,B之间互有对象,导致编译器在A、B之间循环调用,无法分配具体内存,所以导致错误。其中一个定义成指针就可以解决问题了。未知对否?
jyc_nj 2002-09-18
  • 打赏
  • 举报
回复
同意GoAround(GoAround)的.
这两句其实是不用一起存在的.
GoAround 2002-09-18
  • 打赏
  • 举报
回复
如果是
CClientBlockSock ConSock;
那么编译器要为Consock分配内存,此时必须知道CClientBlockSock的具体定义,因此要头文件中么用#include "ClientBlockSock.h"。

如果用
CClientBlockSock * Consock;

则无需分配内存,头文件中用
class CClientBlockSock;
就可以了,但是要在cpp文件中#include "ClientBlockSock.h"

你这里只能在头文件中加上
#include "ClientBlockSock.h"
everandforever 2002-09-18
  • 打赏
  • 举报
回复
你的CClientBlockSock类的定义 会不会也是最后少了';'?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧