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
大家帮忙
WINAPICMainMng::SNMainMngProc(LPVOID lpParameter){
TRACE("T\n");
return 0;
}不需要 WINAPI
{
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平台下都试验过,结果一样。请大家帮忙分析一下!!
#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
去掉静态函数标识符,一样会报错,只有将函数实现写在类里面,编译才会通过。真搞不懂为什么。
#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类有关?!!
//
//////////////////////////////////////////////////////////////////////#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_)