error C2143: syntax error : missing ';' before '*'
我在一个类中添加一个成员变量
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#?!?!?!




