关于在抛出 'std::length_error' 实例后调用终止
Posted
技术标签:
【中文标题】关于在抛出 \'std::length_error\' 实例后调用终止【英文标题】:About terminate called after throwing an instance of 'std::length_error'关于在抛出 'std::length_error' 实例后调用终止 【发布时间】:2014-05-04 15:11:56 【问题描述】:我现在正在尝试使用 CCSprite 在舞台上展示精灵。
角色类是继承CCSprite的类。
我写的代码如下:
bool HellowWorld::init()
方法:
bool HelloWorld::init()
int Indexes[9] = 5,11,15,16,17,19,20,21,25;
int x;
int y;
CCArray *filename = new CCArray();
filename->addObject(new CCString("1-1.png"));
filename->addObject(new CCString("2-1.png"));
filename->addObject(new CCString("1-2.png"));
filename->addObject(new CCString("2-3.png"));
filename->addObject(new CCString("2-3.png"));
filename->addObject(new CCString("1-2.png"));
filename->addObject(new CCString("2-3.png"));
filename->addObject(new CCString("1-1.png"));
filename->addObject(new CCString("1-1.png"));
for(int i=0;i<9;i++)
const char *MyImage = ((CCString*)filename->objectAtIndex(i))->getCString();
characters *chara = (characters*)CCSprite::create(MyImage);
x = Indexes[i]%HORIZONTAL_AXIS;
y = Indexes[i]/HORIZONTAL_AXIS;
CCPoint point = ccp(MARGIN_WIDTH + PIPE_WIDTH * x,MARGIN_HEIGHT + PIPE_HEIGHT * y);
chara->setPosition(point);
this->addChild(chara,1);
但是,我收到以下错误消息:
libc++abi.dylib: terminating with uncaught exception of type std::length_error: basic_string::_S_create
我应该如何解决这个问题?
【问题讨论】:
感谢您的评论。如果我不投,错误显示如下。 「无法使用 'cocos2d::CCSprite * 类型的右值初始化 'Characters *' 类型的变量」 那是因为你正在创建一个精灵,而不是一个角色实例 【参考方案1】:这里肯定有一些编码问题。
const char *MyImage = ((CCString*)filename->objectAtIndex(i))->getCString();
characters *chara = (characters*)CCSprite::create(MyImage);
你做了很多演员,这令人困惑。你投到(characters*)
是错误的。
characters 似乎需要继承 CCSprite*
,我希望是这样。
然后您可以执行以下操作:
characters *chara = characters::create(filename->objectAtIndex(i)->getValue());
如果您的for
循环,您有一个硬编码的9
。您可以将其更改为 filename->count()
,这样它始终会循环到 CCArray 的大小。
这里是 CCSprite 的文档:http://www.cocos2d-x.org/reference/native-cpp/V2.2.3/d8/de9/group__sprite__nodes.html#ga0e84a5bd213dc1556503a4120243a390
【讨论】:
以上是关于关于在抛出 'std::length_error' 实例后调用终止的主要内容,如果未能解决你的问题,请参考以下文章
在抛出 'std::length_error' 的实例后调用终止
在抛出 'std::length_error' what(): basic_string::_S_create 的实例后调用终止
c++ 中的错误:“在抛出 'std::length_error'what() 的实例后调用终止:basic_string::_M_replace_aux”
理解错误“在抛出 'std::length_error'what() 实例后调用终止:basic_string::_S_create Aborted (core dumped)”
抛出“std::length_error”实例后调用 C++ 终止,what(): basic_string::_M_create