[已解决]继承了父类,却不能使用父类的函数

cocos2d-x 2.2.3

想做一个带有hp、id和ap的精灵,于是创建了类BulletSprite ,他继承自CCSprite
class BulletSprite : public CCSprite

但是在使用的时候,却无法使用父类的构造函数。
BulletSprite* pBullet=CCSprite::createWithSpriteFrameName(“bullet0.png”);

BulletSprite* pBullet=BulletSprite::createWithSpriteFrameName(“bullet0.png”);
都不行,报错说:
rror C2440: “=”: 无法从“cocos2d::CCSprite ”转换为“BulletSprite
1> 从基类型到派生类型的强制转换需要 dynamic_cast 或 static_cast
我继承父类就是想要在父类的基础上添加属性,并使用父类的函数啊!如果我不能使用父类的函数,我还继承他干什么!愁!但是既然报错说要使用dynamic_cast 或 static_cast
好吧,于是我这样写:
BulletSprite
pBullet = dynamic_cast<BulletSprite
>(CCSprite::createWithSpriteFrameName(“bullet0.png”));

生成时不报错了,但是运行时报错,我BulletSprite类里新加的属性直接不能使用!这样完全失去子类的意义了啊!愁!求问,如何继承一个类同时,我的子类可以使用父类的构造函数进行构造,子类又可以有自己的属性?

楼主你这是要把指针从基类型到派生类型进行强制转换。你new的是父类的空间大小,当然就不包括你子类增加的内容。强制转换虽然能够编译成功,但是前提是你必须自己保障他们的使用安全,也就是不能使用子类新增的内容。

VS的提示只是建议,并不是告诉你这么做就是对的。在不了解他们的作用和机制的时候冒然使用只会给自己挖坑。强制类型转换,你可以参考下这篇文章。

http://blog.csdn.net/start530/article/details/21990081

至于你要实现的东西,可以参考这里,建议从Node继承,而不是Sprite继承。

http://blog.csdn.net/jackystudio/article/details/11890969

楼主建议你去查查C++的强制转化就明白了。。。这样写是不对的。
另外如果是要实现带hp、id和ap的精灵的话可以用组合的方式。。。

class A : public Sprite
{
public:
static A* createA(const std::string& file);
}
A* A::createA(const std::string& file)
{
auto a = new A;
a->initWithFile(file);
a->autorelease();
return a;
}

谢谢,我的怪物类是继承自CCNode的,子弹类因为内容比较简单,所以就想继承自CCSprite类,结果却不行,不过先不管了,我现在都继承自CCNode类,在里边再添加精灵,至少现在实现了我要的功能。

谢谢,我现在继承自CCNode,在里边单独添加包括精灵在内的属性,这样可以实现。

谢谢,已经可以实现了,不过我想我还是得找时间看看相关知识。