关于在抛出 '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-&gt;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”实例后调用终止

抛出“std::length_error”实例后调用 C++ 终止,what(): basic_string::_M_create