程序如下:
socket.h
-------------------------
namespace NetWork
{
//消息
UINT SOCKET_USER_ERROR = WM_USER + 100;
UINT SOCKET_USER_RECEIVE_TEXT = WM_USER + 101;class Socket : public CSocket
{
...
};
}ListenSocket.h
-------------------------
#include "Socket.h"
namespace NetWork
{class ListenSocket : public CSocket
{
...
};
}编译器报错如下:
Socket.obj : error LNK2005: "unsigned int NetWork::SOCKET_USER_RECEIVE_TEXT" (?SOCKET_USER_RECEIVE_TEXT@NetWork@@3IA) already defined in ListenSocket.obj
Socket.obj : error LNK2005: "unsigned int NetWork::SOCKET_USER_ERROR" (?SOCKET_USER_ERROR@NetWork@@3IA) already defined in ListenSocket.obj
Debug/SocketClass.exe : fatal error LNK1169: one or more multiply defined symbols found请问是怎么回事情?该如何解决呢?谢谢!

解决方案 »

  1.   

    是重复定义了,你别写在头文件里
    包含2次就重复定义了写在CPP里
      

  2.   

    写在CPP里,存在一个问题,就是前台需要使用class CSocketClassDlg 中需要挂接这个消息
    BEGIN_MESSAGE_MAP(CSocketClassDlg, CDialog)
    //{{AFX_MSG_MAP(CSocketClassDlg)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_MESSAGE(SOCKET_USER_ERROR, OnSocketError)
    END_MESSAGE_MAP()
    那么在CSocketClassDlg.cpp中需要重复声明,
    extern SOCKET_USER_ERROR = WM_USER + 100;
    extern SOCKET_USER_RECEIVE_TEXT = WM_USER + 101;
    请问有什么好的办法不重复声明,就可以使用吗?并且不破坏程序框架?
      

  3.   

    用extern申明就是表示定义在别的位置