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

问题描述

在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 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
?

时间: 2024-10-31 06:24:51

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

servlet-如何理解httpServlet类中service方法里的两个参数

问题描述 如何理解httpServlet类中service方法里的两个参数 java语言web编程中,在继承了servlet类实现service方法后应该如何使用request和response两个参数,该如何正确理解两个参数呢?

JSP中内建exception对象时出现500错误的解决方法_JSP编程

本文实例讲述了JSP中内建exception对象时出现500错误的解决方法.分享给大家供大家参考,具体如下: 尝试使用JSP的内建exception对象,写了下面三个文件.思路很简单,文件index若提交字串为空,则get抛出异常,交由error.jsp处理.但实际却不能正常运行,会出现IE的500错误页面.环境为Tomcat 5.5,IE6.0. 在sun的论坛上有人贴出了原因,是IE的某个设置.Tomcat5.0以后的版本error page在处理时会返回error code 500.而IE

在电脑中使用扫描仪时提示通讯错误的解决方法

  最近有用户反映在电脑连接使用扫描仪的时候出现操作失败的情况,打开扫描软件提示通讯错误时请更新扫描端口.如果遇到了这样的问题,应该如何进行解决?此时,大家可以看看本篇教程介绍的方法,来尝试解决上述的问题. 1.进入设备管理器--图像设备--选择相应的扫描仪设备,右击选择更新驱动程序; 2.更新驱动程序页面选择"浏览计算机以查找驱动程序"; 3.选择"从计算机的设备驱动程序列表中选择"; 4.选择显示兼容硬件中的扫描仪图标后点下一步; 5.然后会显示正在安装驱动;

如何再confluence中展示jira里变两张表格的合并结果

问题描述 就是issue中有两个属性名字和版本号,而另外一张表格中有版本号和一个时间,求问如何将这三个属性对应到一张表格里边?求大神. 解决方案 解决方案二:不懂说明意思,直接合并即可啊

卸载VS2011 Developer Preview后Sql Server2008 R2建立数据库关系图报“找不到指定的模块”错误的解决方法_MsSql

可怜我的C盘本来只有8.XG,所以不得不卸载掉它. 卸载掉本身没啥问题,只是昨晚突然发现 Sql Server 2008 R2 Management Studio 突然不能新建数据库关系图了,一建立就会报"找不到指定的模块(MS Visual Database Tools)"的错误: 为了这个错误我甚至认真评估了重新配置数据库的可能性.无奈这个R2的SQL2008打过SP1了,无论是修复还是重装都是很花时间的事情,所以不甘心,在Google上找了一圈.终于找到个类似的主题反应了这个问题

android-如何显示 linear layout 中一组图片里的点击图像

问题描述 如何显示 linear layout 中一组图片里的点击图像 我从SD Card中获取图像,然后把图像动态的添加到HorizontalScrollview中的LinearLayout里.现在当我点击一个图像时,我想在同一个activity中的另一个 ImageView 中,把特定的图像显示成大图像.如何实现?我使用 getting getId(),getTag(),但是没有实现.另外,我不想使用gallery widget ,因为中心锁定功能的缘故. package com.pop.c

深入分析C++派生类中的保护成员继承_C 语言

protected 与 public 和 private 一样是用来声明成员的访问权限的.由protected声明的成员称为"受保护的成员",或简称"保护成员".从类的用户角度来看,保护成员等价于私有成员.但有一点与私有成员不同,保护成员可以被派生类的成员函数引用. 如果基类声明了私有成员,那么任何派生类都是不能访问它们的,若希望在派生类中能访问它们,应当把它们声明为保护成员.如果在一个类中声明了保护成员,就意味着该类可能要用作基类,在它的派生类中会访问这些成员.

C++中派生类的构造和析构顺序详解

派生类因为要调用基类, 所以构造和析构都是按照一定顺序进行; 构造的顺序是: 基(base) -> 派生(derived);即先构造基类, 再构造派生类; 因为 基类 是独立于派生类的, 即不会调用派生类中的对象, 所以应该先被生成; 如果派生类先于基类生成, 则因为无法调用基类资源, 可能生成失败; 析构的顺序是: 派生(derived) -> 基(base); 即先释放派生类, 再释放基类; 因为 派生类 需要先释放调用的基类资源, 所以应该优先释放; 如果基类先析构, 则有可能某些资源被

如何在派生类中的隐藏基类的虚拟重载函数

我创建了一个类,基类中有虚拟重载函数.我想在派生类中改写基类中的虚拟重载函数.代码如下: #include <iostream.h>class B {private: int nNumber;public: virtual void test() { cout << "B::test()\n"; } virtual void test(int x) { nNumber = x; // 将传入的参数赋值给私有成员 cout << "B::te