class CMainMng : public CObject  
{
public:
CMainMng();
virtual ~CMainMng();
//virtual void InitCMainMng(CSuperNeighborDlg* pTmpDlg = NULL);
static DWORD WINAPI SNMainMngProc(LPVOID lpParameter);// {return 0;}; 是正确的 不知道为什么public:
CMsgMng* pMsgMng;
CSuperNeighborDlg*  pMainMng;
};DWORD WINAPI CMainMng::SNMainMngProc(LPVOID lpParameter)
{
TRACE("T\n");
return 0;
}以上代码导致编译时错误,错误如下:
error LNK2005: "public: static unsigned long __stdcall CMainMng::SNMainMngProc(void *)" (?SNMainMngProc@CMainMng@@SGKPAX@Z) already defined in MainMng.obj
1>.\Debug/SuperNeighbor.exe : fatal error LNK1169: one or more multiply defined symbols found
大家帮忙

解决方案 »

  1.   

    DWORD WINAPI CMainMng::SNMainMngProc(LPVOID lpParameter)
    {
        TRACE("T\n");
        return 0;
    }不需要 WINAPI
      

  2.   

    class CMainMng : public CObject  
    {

    public:
    CMainMng();
    virtual ~CMainMng();
    virtual void InitCMainMng(CSuperNeighborDlg* pTmpDlg = NULL);
    static DWORD __stdcall SNMainMngProc(LPVOID lpParameter); public:
    CMsgMng* m_pMsgMng;
    CSuperNeighborDlg*  m_pMainMng;
    };DWORD CMainMng::SNMainMngProc(LPVOID lpParameter)
    {
    return 0;
    }编译也是报告错误,vc6.0 和vs2005平台下都试验过,结果一样。请大家帮忙分析一下!!
      

  3.   


    #if !defined(AFX_MAINMNG_H__1DD954EC_163E_4C3E_B78F_7FAA6FAA1796__INCLUDED_)
    #define AFX_MAINMNG_H__1DD954EC_163E_4C3E_B78F_7FAA6FAA1796__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    #include "MsgMng.h"
    #include "Resource.h"
    #include "SuperNeighborDlg.h"class CMainMng : public CObject  
    {

    public:
    CMainMng();
    virtual ~CMainMng();
    virtual void InitCMainMng(CSuperNeighborDlg* pTmpDlg = NULL);
    DWORD  SNMainMngProc(LPVOID lpParameter); public:
    CMsgMng* m_pMsgMng;
    CSuperNeighborDlg*  m_pMainMng;
    };DWORD CMainMng::SNMainMngProc(LPVOID lpParameter)
    {
    return 0;
    }
    #endif
    去掉静态函数标识符,一样会报错,只有将函数实现写在类里面,编译才会通过。真搞不懂为什么。
      

  4.   


    #include <iostream>
    using namespace std;class CBase
    {
    public:
    static void fun();
    };void CBase::fun()
    {
    cout << "T" << endl;
    }void main()
    {
    CBase base;
    base.fun();
    }上面这段代码,在vc6.0的平台下编译可以通过,为什么以上代码不行呢?
    是不是和派生自cobject类有关?!!
      

  5.   

    DWORD WINAPI 类型改为UINT
      

  6.   

    在cpp文件中写SNMainMngProc(LPVOID lpParameter)的函数体就行了
      

  7.   

    比较规范的写法是将定义和声明分开来写的,但是我的一写就有错,快气疯了。现在我只能这样写:// MainMng.h: interface for the CMainMng class.
    //
    //////////////////////////////////////////////////////////////////////#if !defined(AFX_MAINMNG_H__1DD954EC_163E_4C3E_B78F_7FAA6FAA1796__INCLUDED_)
    #define AFX_MAINMNG_H__1DD954EC_163E_4C3E_B78F_7FAA6FAA1796__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000#include "StdAfx.h"
    #include "MsgMng.h"
    #include "Resource.h"
    #include "SuperNeighborDlg.h"class CMainMng : public CObject  
    {

    public:
    CMainMng();
    virtual ~CMainMng();
    virtual void InitCMainMng(CSuperNeighborDlg* pTmpDlg = NULL);
    static DWORD __stdcall SNMainMngProc(LPVOID lpParameter){
    //////////////////////////////////////////////////////////////////////////
    // Note: this function should runs in a new created thread
    ASSERT(lpParameter);
    CMainMng* tmpMainMng = (CMainMng*) lpParameter;
    return 0;
    }; public:
    CMsgMng* m_pMsgMng;
    CSuperNeighborDlg*  m_pMainDlg;
    };
    #endif // !defined(AFX_MAINMNG_H__1DD954EC_163E_4C3E_B78F_7FAA6FAA1796__INCLUDED_)