不能将参数 1 从“CDecisionMakingx *const ”转换为“const CCounterTimerListener *”

xingmiao1234 2009-05-29 10:30:07
用2008编译文件时出现!
1>j:\example\source files\decisionmakingx.cpp(29) : error C2664: “CCounterTimer::AttachListener”: 不能将参数 1 从“CDecisionMakingx *const ”转换为“const CCounterTimerListener *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>j:\example\source files\decisionmakingx.cpp(30) : error C2664: “CCounterTimer::AttachListener”: 不能将参数 1 从“CDecisionMakingx *const ”转换为“const CCounterTimerListener *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换
1>j:\example\source files\decisionmakingx.cpp(32) : error C2664: “CCounterTimer::AttachListener”: 不能将参数 1 从“CDecisionMakingx *const ”转换为“const CCounterTimerListener *”
1> 与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换

这里出的问题:
m_timerStart.AttachListener( this);
m_timerBallKick.AttachListener(this);
for (int i=0; i<ROBOTNUMBER; ++i)
m_timerShootLine[i].AttachListener(this);

那个计时器的源程序:
/////CCounterTimer.h//////

class CCounterTimer;

class CCounterTimerListener
{
public:
virtual void Update(CCounterTimer* Timer) = 0;
};


class CCounterTimer
{
public:
CCounterTimer();
virtual ~CCounterTimer();

/// Copying not allowed
CCounterTimer(const CCounterTimer &);
CCounterTimer &operator = (const CCounterTimer &);

void AttachListener(CCounterTimerListener* pListener);
void Step();
void Stop();
void Start(UINT nCount);
BOOL IsRuning() { return m_bRunning; };

private:
UINT m_nCount;
BOOL m_bRunning;

CCounterTimerListener* m_pListener;
};

///////CCounterTimer.cpp////////

CCounterTimer::CCounterTimer()
: m_nCount(0), m_bRunning(FALSE)
{

}

CCounterTimer::~CCounterTimer()
{

}

void CCounterTimer::Start(UINT nCount)
{
m_bRunning = TRUE;
m_nCount = nCount;
}


void CCounterTimer::Stop()
{
m_bRunning = FALSE;
m_nCount = 0;
}

void CCounterTimer::Step()
{
if (!m_bRunning || m_nCount == 0)
{
return;
}

m_nCount--;
if (m_nCount == 0)
{
Stop();
m_pListener->Update(this);
}
}

void CCounterTimer::AttachListener(CCounterTimerListener* pListener)
{
m_pListener = pListener;
(dynamic_cast<CDecisionMakingx*>(pListener))->m_vecTimer.push_back(this);
}

程序中的用法:
.h
///< 周期定时器处理
CCounterTimer m_timerStart, m_timerShootLine[ROBOTNUMBER], m_timerBallKick, m_timerEndLine;
vector<CCounterTimer*> m_vecTimer;
void Update(CCounterTimer* Timer);
.cpp
for (vector<CCounterTimer*>::iterator it = m_vecTimer.begin(); it != m_vecTimer.end(); ++it)
(*it)->Step();
……………………………………………………………………

m_timerStart.Start(20);

本人新手,望大家帮帮忙!!
...全文
123 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
daseny 2009-05-29
  • 打赏
  • 举报
回复
CCounterTimer::AttachListener成员函数需要的参数是const CCounterTimerListener *
你那个出错的代码估计是类CDecisionMakingx的成员函数,这里的this指针的类型不匹配上面的参数。
是不是代码写错地方了,还是应该继承CCounterTimerListener的没继承?
goodname 2009-05-29
  • 打赏
  • 举报
回复
友情UP
xingmiao1234 2009-05-29
  • 打赏
  • 举报
回复
大侠们帮帮忙吧!!
新来的没分。。。。。求求你们了!!!
特等奖标准成品论文(Word无水印纯净版) 硬核结构:全文包含完整的摘要、问题重述与分析、模型假设、符号说明、模型建立与求解、灵敏度分析及结论。 即插即用:排版严格遵循官方规范,逻辑严密。拿到手即可作为绝佳的高分参考模板,稍作替换与个性化润色即可极速完稿,彻底解决写论文难的痛点。 双源硬核解题代码(Python与MATLAB双版本) 拒绝假代码:提供底层逻辑清晰、模块化设计的全套可运行源码。 全流程覆盖:涵盖从前期数据清洗预处理,到中期核心数学模型训练,再到后期启发式算法寻优。 傻瓜式运行:代码自带详尽的逐行中文注释,并支持一键生成高质量结果可视化图表,编程小白也能轻松复现与二次开发。 全量数据与结果展示表 所有中间处理数据、模型输出参数以及最终结论,均已精细整理成高质量表格。直观呈现性能评估指标与多模型对比分析,可直接作为论文正文或附件使用,极大提升学术说服力。 独家硬核思路解析 深入浅出剖析出题人意图,详细拆解每一小问的数学本质与底层逻辑,让你不仅知其然更知其所以然。 【四大核心产品优势】 高效实用:所有代码与论文均经过严格测试,确保结果精准无误、完全可复现,省去熬夜试错的时间。 全栈覆盖:从思路分析到跑出结果,再到写出高质量论文,提供一站式全流程资料矩阵。 排版辅助:资料内提供专业的论文排版一键转换工具与官方标准模板,告别格式调整的繁琐。 持续迭代:网盘直发,开赛后资料库将持续滚动更新,所有用户均可免费同步获取最新包。 【适用人群】 想要打破建模瓶颈的参赛队长与主攻手;急需高质量底层代码的编程小白;目标直指特等奖需要高分模板对标的精英团队。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧