程序挂在dynamic_cast<CCObject*>(pDelegate)->retain();

CCTargetedTouchDelegate 的继承 和 dynamic_cast

想写个可以响应touch的sprite

类定义成了这个样子:

[cpp] view plaincopy

  1. class GemBoard : public CCSprite, CCTargetedTouchDelegate

然后注册touch消息的时候

[cpp] view plaincopy

  1. CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);

在这挂了,查了一下午,挂在了

-addTargetedDelegate

-CCTargetedTouchHandler::handlerWithDelegate

-initWithDelegate

-CCTouchHandler::initWithDelegate

-dynamic_cast<CCObject*>(pDelegate)->retain();

-void CCObject::retain(void)

跟到这里,编译器告诉我CCObject的this指针是0,我晕呀。感觉太诡异了。

原因:CCTargetedTouchDelegate在上面的写法中是私有继承,而根据dynamic_cast的作用:(运算符可以在执行期决定真正的类型。如果downcast是安全的(也就说,如果基类指针或者引用确实指向一个派生类对象)这个运算符会传回适当转型过的指针。如果downcast不安全,这个运算符会传回空指针(也就是说,基类指针或者引用没有指向一个派生类对象)。)上面的情况就合情合理了。

今天学到了2个知识点:

1. class B: public A, C  这种情况下A是public继承,C是private继承;class B: A 这个A也是private继承

2.dynamic_cast 除了public 的其他都返回null

所以改成

[cpp] view plaincopy

  1. class GemBoard : public CCSprite, public CCTargetedTouchDelegate

  //改成public继承就可以

就正确了。发现自己的c++基础真烂。

时间: 2024-10-12 19:50:21

程序挂在dynamic_cast<CCObject*>(pDelegate)->retain();的相关文章

Robotium中调用getActivity()方法导致程序挂起的研究浅析

1. 问题背景描述 在工作中需要在没有项目源码的情况下直接使用robotium测试目标android平台launcher,平台的版本基于当前最新的android 4.4.2.之前在验证可行性的时候使用本人同样使用android4.4.2的测试手机htc incredable s针对一个只有apk的notepad应用做过同样的验证,在测试手机上运行完全没有问题.该测试代码如下: package com.example.android.notepad.tryout; import com.robot

解决Windows 8.1 应用商店中安装程序挂起的解决

在Windows 8.1系统的应用程序商店中安装程序时,总是提醒“挂起”状态.无法进行后续安装,看了下国内不少用户有这个困扰,特此总结自己的解决方案. 1. 确保Windows update服务是启动的. 2. 如果windows update服务已启动请忽略此步,直接按照3操作: 若windows update未启动 2.1 启动类型修改为自动,服务状态,点击启动. 2.2 由于使用部分安全卫士.管家,导致Windows update服务异常,无法手工启动的,请访问:https://suppo

应用程序挂起、复原与终止— IOS开发

本文转载至 http://justcoding.iteye.com/blog/1473350 一.挂起 当有电话进来或者锁屏,这时你的应用程会挂起,在这时,UIApplicationDelegate委托会收到通知,调用 applicationWillResignActive 方法,你可以重写这个方法,做挂起前的工作,比如关闭网络,保存数据. C代码   - (void)applicationWillResignActive:(UIApplication*)application{ /*添加你自己

WhatIsHang(程序挂起查询器)

软件简介: 有时,Windows或挂起运行的应用程序,用户界面突然停止响应,并且您不能确定是什么原因造成的问题,或如何解决该问题.此实用程序尝试检测软件或进程正在挂起,并显示一些信息,可能让你进行梳理和理解了什么是在这类意外行为的根源. 图片预览: 下载地址:http://dickmoore.cn/Down/whatishang.zip 文章作者:DickMoore 文章来源:开怀软件园

IOS开发 applicationDidBecomeActive 应用程序挂起、复原与终止

一.挂起 当有电话进来或者锁屏,这时你的应用程会挂起,在这时,UIApplicationDelegate委托会收到通知,调用 applicationWillResignActive 方法,你可以重写这个方法,做挂起前的工作,比如关闭网络,保存数据. C代码   - (void)applicationWillResignActive:(UIApplication*)application{ } 当你的程序被挂起后他不会在后台运行. 二.复原 当程序复原时,另一个名为 applicationDidB

正尝试在 OS 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。

当我在窗体初始化的时候,调用了一个外部的dill时,它就不知什么原因的 抛出一个“正试图在 os 加载程序锁内执行托管代码.不要尝试在 DllMain 或映像初始化函数内运行托管代码”的异常,程序就卡掉了,在网上查了查,相关说明如下: .NET2.0中增加了42种非常强大的调试助手,MDA.Loaderlock 是其中之一.Loaderlock检测在一个拥有操作系统loader lock的线程上运行托管代码的情况.这样做有可能会引起死锁,并且有可能在操作系统加载器初始化DLL前被使用. 大致理解

Windows Store App 中挂起时,程序奔溃的问题

昨天在开发windows phone 8.1程序时,发现程序在挂起的时候,会自动退出.通过调试发现错误信息是 System.Runtime.InteropServices.COMException (0x80004005): Unspecified error GetNavigationState doesn't support serialization of a parameter type which was passed to Frame.Navigate. at Windows.UI.

iOS程序执行顺序和UIViewController 的生命周期(整理)

说明:此文是自己的总结笔记,主要参考: iOS程序的启动执行顺序 AppDelegate 及 UIViewController 的生命周期 UIView的生命周期 言叶之庭.jpeg 一. iOS程序的启动执行顺序 程序启动顺序图 iOS启动原理图.png 具体执行流程 程序入口进入main函数,设置AppDelegate称为函数的代理 程序完成加载[AppDelegate application:didFinishLaunchingWithOptions:] 创建window窗口 程序被激活[

**iOS开发系列--IOS程序开发概览

http://www.cnblogs.com/kenshincui/p/3890880.html 概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的知识是你日后开发IOS的基础,没有那些知识你开发IOS会很痛苦,现在很多开发人员做开发都是一知半解,程序质量确实令人担忧,所以还是希望大家能够熟练掌握前面的内容,开发过程中多思考,彻底理解程序运行的原理