在头文件中调用另一个类出现的有关问题
在头文件中调用另一个类出现的问题
e:\c++程序设计\chatroomserver\listensocket.h(27) : error C2146: syntax error : missing ';' before identifier 'CCSL'
e:\c++程序设计\chatroomserver\listensocket.h(27) : error C2501: 'CclientSocketList' : missing storage-class or type specifiers
e:\c++程序设计\chatroomserver\listensocket.h(27) : error C2501: 'CCSL' : missing storage-class or type specifiers
一共有三个头文件,这个代码是 ListenSocket.h ,另一个头文件,ClientSocket.h。他们同时调用了CclientSocketList这个genric class。我在ClientSocket.h中只要声明一次class CclientSocketList 就可以,在ListenSocket.h中就无效
------解决方案--------------------
clientSocketList.h这个头文件或者它包含的其他头文件中,是不是结尾少了“;"??
------解决方案--------------------
你那是循环引用了。A引用B,B又引用A
解决方法:
如果a需要用到b使用的因此而包含了b,与之对应的,b要用到a中定义的而又包含了a,这种情况下
1.如果a或者b可能仅仅需要声明对方,而不需要包含对方,此时就声明就可以了。
2.把a中需要用到b的那部分合并到a,然后仅仅b包含a就可以了,a不需要包含b.
3.整个都重整。
------解决方案--------------------
clientSocketList.h都include了哪些文件?
------解决方案--------------------
看看 clientSocketList.h 中的类声明是不是少了 ';'
------解决方案--------------------
如果互相引用的话,最好使用指针变量,并在头文件上边声明class CclientSocketList; 然后在cpp文件里面引用其头文件
------解决方案--------------------
循环引用需要用指针
同时进行前置申明
------解决方案--------------------
CclientSocketList 类你是如何定义的?
#include "StdAfx.h"
#include "clientSocketList.h"
#if !defined(AFX_LISTENSOCKET_H__0B72B719_9C8B_47A8_95D8_64FC109B912E__INCLUDED_)
#define AFX_LISTENSOCKET_H__0B72B719_9C8B_47A8_95D8_64FC109B912E__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ListenSocket.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// CListenSocket command target
class CListenSocket : public CSocket
{
// Attributes
public:
// Operations
public:
CclientSocketList CCSL;
CListenSocket();
virtual ~CListenSocket();
// Overrides
public:
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CListenSocket)
public:
virtual void OnAccept(int nErrorCode);
//}}AFX_VIRTUAL
// Generated message map functions
//{{AFX_MSG(CListenSocket)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
// Implementation
protected:
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_LISTENSOCKET_H__0B72B719_9C8B_47A8_95D8_64FC109B912E__INCLUDED_)
e:\c++程序设计\chatroomserver\listensocket.h(27) : error C2146: syntax error : missing ';' before identifier 'CCSL'
e:\c++程序设计\chatroomserver\listensocket.h(27) : error C2501: 'CclientSocketList' : missing storage-class or type specifiers
e:\c++程序设计\chatroomserver\listensocket.h(27) : error C2501: 'CCSL' : missing storage-class or type specifiers
一共有三个头文件,这个代码是 ListenSocket.h ,另一个头文件,ClientSocket.h。他们同时调用了CclientSocketList这个genric class。我在ClientSocket.h中只要声明一次class CclientSocketList 就可以,在ListenSocket.h中就无效
------解决方案--------------------
clientSocketList.h这个头文件或者它包含的其他头文件中,是不是结尾少了“;"??
------解决方案--------------------
你那是循环引用了。A引用B,B又引用A
解决方法:
如果a需要用到b使用的因此而包含了b,与之对应的,b要用到a中定义的而又包含了a,这种情况下
1.如果a或者b可能仅仅需要声明对方,而不需要包含对方,此时就声明就可以了。
2.把a中需要用到b的那部分合并到a,然后仅仅b包含a就可以了,a不需要包含b.
3.整个都重整。
------解决方案--------------------
clientSocketList.h都include了哪些文件?
------解决方案--------------------
看看 clientSocketList.h 中的类声明是不是少了 ';'
------解决方案--------------------
如果互相引用的话,最好使用指针变量,并在头文件上边声明class CclientSocketList; 然后在cpp文件里面引用其头文件
------解决方案--------------------
循环引用需要用指针
同时进行前置申明
------解决方案--------------------
CclientSocketList 类你是如何定义的?