Float打印出一个很大的奇怪值

Dep*_*ive -2 c++ pointers cocos2d-x

所以,我创建了一个State类.在State该类的create函数中,它StateVisual通过调用StateVisual类的create函数创建一个类,并将自身作为参数传递.(参数是参考,因此没有复制).所述StateVisual然后设置参数(的State实例),因为它的父变量,它是一个状态类型的指针.

StateVisual创建函数中,一切正常.但是,当你使用它的更新方法,并尝试打印它的父级大小时,它会打印一些奇怪的值.

#ifndef STATE_H
#define STATE_H

#include "cocos2d.h"
class StateVisual;



class State {
public:

    State();
    ~State();
    static State create();
    StateVisual *visual;
    float size;
    void setSize(float);
    void update(float);
private:
    cocos2d::Scheduler* _scheduler;


};

#endif
Run Code Online (Sandbox Code Playgroud)

StateVisual.cpp

#ifndef STATE_VIS_H
#define STATE_VIS_H



#include "cocos2d.h"
#include "State.h"


class StateVisual : public cocos2d::Sprite {

public:

    StateVisual();
    ~StateVisual();

    // create a visual
    State* parent;
    static StateVisual* create(State& parent);
    cocos2d::Label* label;
    void setSize(float);
    void update(float);




private:
    bool _activated;
    float _size;


};

#endif
Run Code Online (Sandbox Code Playgroud)

State.cpp

#include "State.h"
#include "GameScene.h"


State::State() : size(0) {
    CCLOG("Created");
}

State::~State() {

}

void State::setSize(float newSize) {
    size = newSize;
    CCLOG("%f, %f", newSize, size);
}

void State::update(float dt) {

}

State State::create() {
    State state;
    state.visual = StateVisual::create(state);
    cocos2d::SEL_SCHEDULE ss;
    return state;
}
Run Code Online (Sandbox Code Playgroud)

StateVisual.cpp

#include "StateVisual.h"
#include "GameScene.h"

using namespace cocos2d;


StateVisual::StateVisual() : parent(nullptr) {
    CCLOG("New STATE VISUAL!");
}
StateVisual::~StateVisual() {

}
void StateVisual::setSize(float size) {
    setContentSize(Size(size, size));
    if (size > 30) {
        label->setSystemFontSize(size*.1);
        label->setOpacity(255);
    }
    else {
        label->setOpacity(0);
    }
}

void StateVisual::update(float dt) {
    cocos2d::MathUtil::smooth(&_size, parent->size, dt, .2);
    setSize(_size);
    CCLOG("%f, %f", _size, (*this->parent).size);
}

StateVisual* StateVisual::create(State &parent) {

    StateVisual* visual(new StateVisual());

    if (visual->initWithFile("Circle.png"))
    {
        visual->setSize(200);
        visual->_size = 200;

        visual->parent = &parent;
        visual->parent->setSize(20);
        CCLOG("PARENT SIZE: %f", visual->parent->size);

        visual->autorelease();
        visual->scheduleUpdate();
        return visual;
    }

    CC_SAFE_DELETE(visual);
    return NULL;
}
Run Code Online (Sandbox Code Playgroud)

它输出:

Created
New STATE VISUAL!
cocos2d: fullPathForFilename: No file found at /cc_2x2_white_image. Possible 
missing file.
20.000000, 20.000000
PARENT SIZE: 20.000000
500.000000, 500.000000
cocos2d: QuadCommand: resizing index size from [-1] to [2560]

168.058044, -107374176.000000  <-- Those are the weird values it prints
155.130508, -107374176.000000

The program '[1464] State.exe' has exited with code 0 (0x0).
Run Code Online (Sandbox Code Playgroud)

rus*_*tyx 5

0xCCCCCCCC,用于在Debug构建中填充未初始化内存的典型值,解释为32位浮点数,等于-107374176.000000.您正在打印未初始化的float值.