问题描述
- 在VS2005中单个工程里建立两个CWinThread的派生类,编译时发出C2084错误,怎么解决?
-
=====描述=====我在VS2005中用项目->添加类添加了两个CWinThread类的派生类——CMyThread与CFloatWndThread,现在编译时报C2084错误,百度上都说是函数有定义了两个函数体,但我没发现有什么重定义啊~~请问大家有何高招??
=====代码=====
//MyThread.h
#include "stdafx.h"
// CMyThreadclass CMyThread : public CWinThread { DECLARE_DYNCREATE(CMyThread) protected: CMyThread(); // 动态创建所使用的受保护的构造函数 virtual ~CMyThread(); afx_msg void OnStateChange(UINT wp,LONG lp); NOTIFYICONDATA caps; public: virtual BOOL InitInstance(); virtual int ExitInstance(); HICON capson,capsoff; CWinThread* ThreadP; protected: DECLARE_MESSAGE_MAP() }; #endif
// MyThread.cpp : 实现文件
//#include "stdafx.h" #include "Project.h" #include "MyThread.h" // CMyThread IMPLEMENT_DYNCREATE(CMyThread, CWinThread) CMyThread::CMyThread() { } CMyThread::~CMyThread() { } //下面代码没有错误,省略。。
//FloatWndThread.h
#pragma once
#ifndef FLOAT_WINDOW_THREAD
#define FLOAT_WINDOW_THREAD
#include "FloatWnd.h"// CFloatWndThread class CFloatWndThread : public CWinThread { DECLARE_DYNCREATE(CFloatWndThread) DECLARE_DYNAMIC(CFloatWndThread) static CObject* PASCAL CFloatWndThread::CreateObject(); protected: virtual ~CFloatWndThread(); public: CFloatWndThread(); virtual BOOL InitInstance(); virtual int ExitInstance(); protected: DECLARE_MESSAGE_MAP() private: HMODULE hMod; CFloatWnd* pFWnd; }; #include "FloatWndThread.cpp" #endif
// FloatWndThread.cpp : 实现文件
//
#ifndef _FLOAT_WINDOW_THREAD_CPP
#define _FLOAT_WINDOW_THREAD_CPP
#include "stdafx.h"
#include "Project.h"
#include "FloatWndThread.h"
#include "FloatWnd.h"
//using namespace Inflict;
// CFloatWndThreadIMPLEMENT_DYNCREATE(CFloatWndThread, CWinThread) CFloatWndThread::CFloatWndThread(){} CFloatWndThread::~CFloatWndThread(){} BOOL CFloatWndThread::InitInstance() { hMod = LoadLibraryA("FloatWnd.dll"); if(hMod) { pNewFloatWnd NewFloatWnd = (pNewFloatWnd)::GetProcAddress(hMod,"NewFloatWnd"); pShowFloatWnd ShowFloatWnd = (pShowFloatWnd)::GetProcAddress(hMod,"ShowFloatWnd"); if(NewFloatWnd&&ShowFloatWnd) { pFWnd=NewFloatWnd(); if(pFWnd) { ShowFloatWnd(pFWnd,NULL); //pFWnd->DoModal(); } } } // TODO: 在此执行任意逐线程初始化 return TRUE; } int CFloatWndThread::ExitInstance() { // TODO: 在此执行任意逐线程清理 return CWinThread::ExitInstance(); } BEGIN_MESSAGE_MAP(CFloatWndThread, CWinThread) END_MESSAGE_MAP() // CFloatWndThread 消息处理程序 #endif
=====输出=====
1>FloatWndThread.cpp
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(11) : error C2535: “CRuntimeClass *CFloatWndThread::_GetBaseClass(void)”: 已经定义或声明成员函数
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(10) : 参见“CFloatWndThread::_GetBaseClass”的声明
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(11) : error C2086: “const CRuntimeClass CFloatWndThread::classCFloatWndThread”: 重定义
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(10) : 参见“CFloatWndThread::classCFloatWndThread”的声明
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(11) : error C2535: “CRuntimeClass *CFloatWndThread::GetThisClass(void)”: 已经定义或声明成员函数
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(10) : 参见“CFloatWndThread::GetThisClass”的声明
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(11) : error C2535: “CRuntimeClass *CFloatWndThread::GetRuntimeClass(void) const”: 已经定义或声明成员函数
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(10) : 参见“CFloatWndThread::GetRuntimeClass”的声明
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(12) : error C2535: “CObject *CFloatWndThread::CreateObject(void)”: 已经定义或声明成员函数
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(10) : 参见“CFloatWndThread::CreateObject”的声明
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.cpp(12) : error C2084: 函数“CObject *CFloatWndThread::CreateObject(void)”已有主体
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(10) : 参见“CreateObject”的前一个定义
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.cpp(12) : error C2084: 函数“CRuntimeClass *CFloatWndThread::_GetBaseClass(void)”已有主体
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(10) : 参见“_GetBaseClass”的前一个定义
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.cpp(12) : error C2374: “classCFloatWndThread”: 重定义;多次初始化
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(10) : 参见“classCFloatWndThread”的声明
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.cpp(12) : error C2084: 函数“CRuntimeClass *CFloatWndThread::GetThisClass(void)”已有主体
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(10) : 参见“GetThisClass”的前一个定义
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.cpp(12) : error C2084: 函数“CRuntimeClass *CFloatWndThread::GetRuntimeClass(void) const”已有主体
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(10) : 参见“GetRuntimeClass”的前一个定义
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.cpp(15) : error C2084: 函数“CFloatWndThread::CFloatWndThread(void)”已有主体
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(18) : 参见“{ctor}”的前一个定义
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.cpp(19) : error C2084: 函数“CFloatWndThread::~CFloatWndThread(void)”已有主体
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(15) : 参见“{dtor}”的前一个定义
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.cpp(23) : error C2084: 函数“BOOL CFloatWndThread::InitInstance(void)”已有主体
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(19) : 参见“InitInstance”的前一个定义
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.cpp(44) : error C2084: 函数“int CFloatWndThread::ExitInstance(void)”已有主体
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(20) : 参见“ExitInstance”的前一个定义
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.cpp(50) : error C2084: 函数“const AFX_MSGMAP *CFloatWndThread::GetMessageMap(void) const”已有主体
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(23) : 参见“GetMessageMap”的前一个定义
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.cpp(50) : error C2084: 函数“const AFX_MSGMAP *CFloatWndThread::GetThisMessageMap(void)”已有主体
1> d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.h(23) : 参见“GetThisMessageMap”的前一个定义
1>d:我的文档visual studio 2005projectsprojectprojectfloatwndthread.cpp(55) : fatal error C1020: 意外的 #endif
?