2015-03-19 2 views
0

Рассмотрим следующее объявление классаCocos2d-х AppDelegate инициализации элемент данных потерял

class AppDelegate : private cocos2d::Application 
{ 
private: 
    int _test; 
    // .... 
}; 

Я инициализирующий элемент int _test данных как

AppDelegate::AppDelegate() : _test(20) { 
    cocos2d::log("Initialzing %p with _test = %d", this, _test); 
} 

Позже, когда код

bool AppDelegate::applicationDidFinishLaunching() { 
    cocos2d::log("Checking %p, found _test = %d", this, _test); 
    // .... 
} 

, выход

Initialzing 0x10da4aa20 with _test = 20 
// .... 
Checking 0x10da4aa20, found _test = 1056964608 

Это означает, что _test неинициализирован. Проблема, похоже, специфична для архитектуры cocos2d-x, так как я не могу воспроизвести ее в проекте песочницы (где AppDelegate обменивается на более простой класс).

Мой вопрос: почему эта инициализация потеряна? Есть ли другой способ инициализировать и использовать элемент данных в классе AppDelegate?

+0

У вас есть собственный экземпляр-копирайтер или оператор копирования? –

+0

Нет, нет настраиваемых копий-конструкторов или операторов присваивания копий. – conciliator

+0

Я не знаком с cocos2dx.I помню, что каждый класс имеет функцию, которая называется «init». Они вызывается после конструктора. Возможно, эта функция делает это ... –

ответ

0

Так оказалось, что элемент _test данных была изменена, как PhysicsMaterial конструктор был выполнен:

typedef struct CC_DLL PhysicsMaterial 
{ 
    float density;   ///< The density of the object. 
    float restitution;  ///< The bounciness of the physics body. 
    float friction;   ///< The roughness of the surface of a shape. 

    PhysicsMaterial() 
    : density(0.0f) 
    , restitution(0.0f) 
    , friction(0.0f) 
    {} 

    PhysicsMaterial(float aDensity, float aRestitution, float aFriction) 
    : density(aDensity) 
    , restitution(aRestitution) 
    , friction(aFriction) 
    {} // Watch reveals that this was the culprit ... 
}PhysicsMaterial; 

Очевидно, что нет кода в этом конструктор, который должен изменить значение _test элемента, что указывает на что-то не так с предыдущей сборкой.

Чистая и последующая полная перестройка решила проблему.

Смежные вопросы