cocos2d-x 3.1 EXC#u接触不良访问事件+;作用

cocos2d-x 3.1 EXC#u接触不良访问事件+;作用,cocos2d-x,exc-bad-access,cocos2d-x-3.0,Cocos2d X,Exc Bad Access,Cocos2d X 3.0,我是cocos2d-x初学者,在TouchStart事件+函数方面有困难。 当我用xCode(5.1.1+iPhone sim 7.1)运行这个简单的代码时,我总是在[label->setString(“Foo Bar”)]点获得EXC_BAD_访问权限 我尝试了几种方法来解决这个问题,但我在这个问题上完全陷入了两三天的困境 有人知道错误的观点吗 HelloWorld.h HelloWorld.cpp 谢谢。您的问题在这一行: auto label = Label::create("Hello

我是cocos2d-x初学者,在TouchStart事件+函数方面有困难。 当我用xCode(5.1.1+iPhone sim 7.1)运行这个简单的代码时,我总是在[label->setString(“Foo Bar”)]点获得EXC_BAD_访问权限

我尝试了几种方法来解决这个问题,但我在这个问题上完全陷入了两三天的困境

有人知道错误的观点吗

HelloWorld.h

HelloWorld.cpp


谢谢。

您的问题在这一行:

auto label = Label::create("Hello World", "Arial", 112);
在这一行中,您声明了一个名为
label
的新变量,其作用域仅适用于
init
函数。您还有一个名为
label
的类变量,它们是不同的。如果在方法中声明了一个与类变量同名的变量,它将
shadow
。考虑这个例子:

class A {
    int variable;

    void method() {

        int variable; // this is not the same thing as the one above

        variable = 5; //assignment to local variable

        this->variable = 3; //asignment to class variable

    }
}

因此,您实际上没有向类变量
label
分配任何内容,您稍后将在touch方法中引用这些变量。解决此问题的最简单方法是从
init()
方法中删除
auto
处的
auto
关键字。

正如@Losiowaty所指出的,使用
auto
有时可能是危险的

cocos2d::Label* label = cocos2d::Label::create("Hello World", "Arial", 112);

另外,可能还有更好的构造函数可以使用:

非常感谢您的回答Losiowaty。我想我有点理解你写的东西。我尝试删除“auto”,并在“label->setPosition”行获得了EXC\u BAD\u访问权限。。嗯…终于,它像你说的那样起作用了。我一直在尝试使用
Label::createWithTTF
,出于某种原因,它会返回EXC\u BAD\u访问错误。但是“
auto
deleted-ver”完全可以使用
Label::create
。非常感谢你的建议!这并不能解决他的问题——它仍然不会将值(地址)分配给类变量,而是分配给本地变量。谢谢GameDeveloper,我也尝试了这段代码,但正如Losiowaty所说,它不起作用。无论如何谢谢你!
class A {
    int variable;

    void method() {

        int variable; // this is not the same thing as the one above

        variable = 5; //assignment to local variable

        this->variable = 3; //asignment to class variable

    }
}
cocos2d::Label* label = cocos2d::Label::create("Hello World", "Arial", 112);