CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

error C2143: syntax error : missing ';' before '*'

楼主lday(一天)2005-05-26 20:55:24 在 VC/MFC / 基础类 提问

我在一个类中添加一个成员变量  
  class   CMySocket   :   public   CAsyncSocket      
  {  
   
  public:  
  CMySocket();  
  virtual   ~CMySocket();  
  private:  
  CTalkDlg*   m_pDlg;                   //*******这里出错  
  };  
   
  什么都还不做,就是放在这里  
  结果编译报错:  
   
  --------------------Configuration:   Talk   -   Win32   Debug--------------------  
  Compiling...  
  Talk.cpp  
  d:\works\msworks\talk\mysocket.h(23)   :   error   C2143:   syntax   error   :   missing   ';'   before   '*'  
  d:\works\msworks\talk\mysocket.h(23)   :   error   C2501:   'CTalkDlg'   :   missing   storage-class   or   type   specifiers  
  d:\works\msworks\talk\mysocket.h(23)   :   error   C2501:   'm_pDlg'   :   missing   storage-class   or   type   specifiers  
  Generating   Code...  
  Compiling...  
  TalkDlg.cpp  
  d:\works\msworks\talk\mysocket.h(23)   :   error   C2143:   syntax   error   :   missing   ';'   before   '*'  
  d:\works\msworks\talk\mysocket.h(23)   :   error   C2501:   'CTalkDlg'   :   missing   storage-class   or   type   specifiers  
  d:\works\msworks\talk\mysocket.h(23)   :   error   C2501:   'm_pDlg'   :   missing   storage-class   or   type   specifiers  
  Generating   Code...  
  Compiling...  
  MySocket.cpp  
  d:\works\msworks\talk\mysocket.h(23)   :   error   C2143:   syntax   error   :   missing   ';'   before   '*'  
  d:\works\msworks\talk\mysocket.h(23)   :   error   C2501:   'CTalkDlg'   :   missing   storage-class   or   type   specifiers  
  d:\works\msworks\talk\mysocket.h(23)   :   error   C2501:   'm_pDlg'   :   missing   storage-class   or   type   specifiers  
  Generating   Code...  
  Error   executing   cl.exe.  
   
  Talk.exe   -   9   error(s),   0   warning(s)  
   
  这是什么原因?!  
  我已经把#include   "TalkDlg.h"加入到CMySocket.h里面了  
  //去掉private:  
  CTalkDlg*   m_pDlg;                   //这个  
  就什么问题都没有 问题点数:50、回复次数:7Top

1 楼krh2001(边城浪子)回复于 2005-05-26 21:02:05 得分 25

可能你的   TalkDlg.h     又包含了mysocket.h    
  这样的相互引用   是不行的,   用向前声明:  
   
  class   CTalkDlg;  
   
  class   CMySocket   :   ....  
  {  
      ....  
      CTalkDlg*     m_pDlg;  
  };  
   
   
  在MySocket.cpp   里包含   TalkDlg.h.  
   
  Top

2 楼newbiestar()回复于 2005-05-26 21:17:33 得分 20

up楼上,建议使用前向声明,只要你在你的那个.h文件中不使用CTalkDlg类中的成员(定义指针,reference都可以,类对象不行),这样就可以顺利通过。  
   
  但是如果你要使用CTalkDlg中的成员,这个方法就没有用了……Top

3 楼lday(一天)回复于 2005-05-26 21:18:42 得分 0

恩   的确是因为我在TalkDlg.h里  
  #include   "MySocket.h"  
  把这个去掉就好了  
   
  可问题是我在CTalkDlg里面还要声明两个CMySocket的变量  
  private:  
  CMySocket   m_sListenSocket;  
  CMySocket   m_sConnectSocket;  
  如果把include   "MySocket.h"去掉的话就不行了...  
   
  你说“用向前声明:”是什么意思,能不能具体一点    
  “在MySocket.cpp   里包含   TalkDlg.h.”   又是怎么一回事?  
  Top

4 楼vcmute(BCare4 H1Rest Good9!)回复于 2005-05-26 21:21:27 得分 5

问题就奇怪在//去掉private:就什么问题都没有  
  Top

5 楼krh2001(边城浪子)回复于 2005-05-26 21:21:53 得分 0

TackDlg.h   不用改,还是用原来的.   MySocket   照我说的改一下就行了.    
   
  向前引用   是为了解决你的这个   循环引用   的问题,   比如   A   引用了   B   ,而B又引用   了A   ,那么先声明哪个都不行,只能向前引用了.Top

6 楼krh2001(边城浪子)回复于 2005-05-26 21:23:04 得分 0

问题就奇怪在//去掉private:就什么问题都没有  
  --------------------------------------------  
  楼主的意思应该是连下面这一句声明也去掉了,不然不会没有问题的Top

7 楼lday(一天)回复于 2005-05-26 21:25:50 得分 0

在  
  class   CMySocket   :   ....  
  {  
      ....  
      CTalkDlg*     m_pDlg;  
  };  
  之前加入一句  
  class   CTalkDlg;  
  就可以了  
  这就是向前声明?!  
   
  能说明一下原因吗?Top

相关问题

  • error C2143: syntax error : missing ';' before '*'在线等待
  • 请教:error C2143: syntax error : missing ';' before '&'
  • Help! insert statement syntax in c#.net
  • error C2143: syntax error : missing ';' before 'PCH creation point'是什么意思?
  • 为什么会出这错:error C2146: syntax error : missing ';' before identifier 'm_wndIconListBox'?
  • error C2146: syntax error : missing ')' before identifier 'SetWindowTextA' 这是什么错误?!
  • 编译问题:error C2143: syntax error : missing ';' before 'string'
  • [C++ Error] Caculater.cpp(21): E2141 Declaration syntax error
  • 出现如下错误???请指教!谢谢 !error C2143: syntax error : missing ';' before 'PCH creation point'
  • c#?!?!?!

关键词

  • talk
  • storage
  • ctalkdlg
  • mysocket
  • msworks
  • talkdlg
  • cmysocket
  • pdlg
  • 引用
  • 去掉

得分解答快速导航

  • 帖主:lday
  • krh2001
  • newbiestar
  • vcmute

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo