2 u011622276 u011622276 于 2014.07.21 22:52 提问

在VS2005中单个工程里建立两个CWinThread的派生类,编译时发出C2084错误,怎么解决?

=====描述=====

我在VS2005中用项目->添加类添加了两个CWinThread类的派生类——CMyThread与CFloatWndThread,现在编译时报C2084错误,百度上都说是函数有定义了两个函数体,但我没发现有什么重定义啊~~请问大家有何高招??

=====代码=====

//MyThread.h
#include "stdafx.h"
// CMyThread

class 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;
// CFloatWndThread

IMPLEMENT_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 2005\projects\project\project\floatwndthread.h(11) : error C2535: “CRuntimeClass *CFloatWndThread::_GetBaseClass(void)”: 已经定义或声明成员函数
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(10) : 参见“CFloatWndThread::_GetBaseClass”的声明
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(11) : error C2086: “const CRuntimeClass CFloatWndThread::classCFloatWndThread”: 重定义
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(10) : 参见“CFloatWndThread::classCFloatWndThread”的声明
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(11) : error C2535: “CRuntimeClass *CFloatWndThread::GetThisClass(void)”: 已经定义或声明成员函数
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(10) : 参见“CFloatWndThread::GetThisClass”的声明
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(11) : error C2535: “CRuntimeClass *CFloatWndThread::GetRuntimeClass(void) const”: 已经定义或声明成员函数
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(10) : 参见“CFloatWndThread::GetRuntimeClass”的声明
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(12) : error C2535: “CObject *CFloatWndThread::CreateObject(void)”: 已经定义或声明成员函数
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(10) : 参见“CFloatWndThread::CreateObject”的声明
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.cpp(12) : error C2084: 函数“CObject *CFloatWndThread::CreateObject(void)”已有主体
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(10) : 参见“CreateObject”的前一个定义
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.cpp(12) : error C2084: 函数“CRuntimeClass *CFloatWndThread::_GetBaseClass(void)”已有主体
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(10) : 参见“_GetBaseClass”的前一个定义
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.cpp(12) : error C2374: “classCFloatWndThread”: 重定义;多次初始化
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(10) : 参见“classCFloatWndThread”的声明
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.cpp(12) : error C2084: 函数“CRuntimeClass *CFloatWndThread::GetThisClass(void)”已有主体
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(10) : 参见“GetThisClass”的前一个定义
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.cpp(12) : error C2084: 函数“CRuntimeClass *CFloatWndThread::GetRuntimeClass(void) const”已有主体
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(10) : 参见“GetRuntimeClass”的前一个定义
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.cpp(15) : error C2084: 函数“CFloatWndThread::CFloatWndThread(void)”已有主体
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(18) : 参见“{ctor}”的前一个定义
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.cpp(19) : error C2084: 函数“CFloatWndThread::~CFloatWndThread(void)”已有主体
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(15) : 参见“{dtor}”的前一个定义
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.cpp(23) : error C2084: 函数“BOOL CFloatWndThread::InitInstance(void)”已有主体
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(19) : 参见“InitInstance”的前一个定义
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.cpp(44) : error C2084: 函数“int CFloatWndThread::ExitInstance(void)”已有主体
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(20) : 参见“ExitInstance”的前一个定义
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.cpp(50) : error C2084: 函数“const AFX_MSGMAP *CFloatWndThread::GetMessageMap(void) const”已有主体
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(23) : 参见“GetMessageMap”的前一个定义
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.cpp(50) : error C2084: 函数“const AFX_MSGMAP *CFloatWndThread::GetThisMessageMap(void)”已有主体
1> d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.h(23) : 参见“GetThisMessageMap”的前一个定义
1>d:\我的文档\visual studio 2005\projects\project\project\floatwndthread.cpp(55) : fatal error C1020: 意外的 #endif

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!