0

我有一个类,private其中有一个名为的成员变量,它是一个int. 出于某种原因,如果我在方法中更改它的值(例如在构造函数上),它会改变得很好。但是,如果我在不同的方法上更改它并用于printf在另一种不同的方法上输出其内容,则该值不会被结转并变成一个非常大的数字。

标题:

class Fruit {
   private:
      int m_fruitState; // 0 = IDLE, 1 = GROWING, 2 = READY, 3 = FALLEN, 4 = ROTTEN
      int m_fruitTimer;

    public:
       Fruit ( );

       int getFruitState( ); // Returns m_fruitState
       void setFruitState( int fState );

       void growFruit( CCTime dt ); // Called every 1 second (CCTime is a cocos2d-x class)
    };

CPP

#include "Fruit.h"

Fruit::Fruit( ) {
   // Set other member variables
   this -> setFruitState( 0 );  // m_fruitState = 0
   this -> m_fruitTimer = 0;
   this -> m_fruitSprite -> schedule( schedule_selector( Fruit::growFruit ), 1.0 ); // m_fruitSprite is a CCSprite (a cocos2d-x class). This basically calls growFruit() every 1 second
}

int getFruitState( ) {
   return this -> m_fruitState;
}

void setFruitState( int state ) {
   this -> m_fruitState = state;
}

void growFruit( CCTime dt ) {
   this -> m_fruitTimer++;
   printf( "%d seconds have elapsed.", m_fruitTimer );
   printf( "STATE = %d", this -> m_fruitState ); // Says my m_fruitState is a very big number

   // This if condition never becomes true, because at this point, m_fruitState = a very big number
   if ( this -> getfruitState( ) == 0 ) { // I even changed this to m_fruitState == 0, still the same
      if ( this -> m_fruitTimer == 5 ) { // check if 5 seconds have elapsed
         this -> setFruitState( 1 );
         this -> m_fruitTimer = 0;
      }
   }
}

然后主要是创建 MyClass 的一个实例。

我不知道为什么会这样。为什么 C++ 会这样做,我该如何解决?提前致谢。

4

2 回答 2

3
     changeInt( int newInt );       // Assume newInt = 5

int从上面的行中删除。

  void doSomething( ); {

;从上面的行中删除。

更新:现在您缺少;头文件末尾的 a 。修复所有明显的错误(这可能会阻止它甚至编译),它对我来说很好。您粘贴的代码与实际代码之间仍然存在差异,或者您发现了编译器错误。

Constructor: myInt = 0
changeInt( int ) : myInt = 5
After constructor and calling changeInt(), myInt = 5
于 2012-08-06T08:11:25.837 回答
3

的“选择器”参数schedule应该是 a SEL_SCHEDULE,其中

typedef void(CCObject::* SEL_SCHEDULE)(float)

即它应该是 a 的成员函数CCObject
它也应该是您调用的对象的成员schedule 否则调用时的目标将是错误的。

我怀疑这

this -> m_fruitSprite -> schedule( schedule_selector( Fruit::growFruit ), 1.0 );

导致指向精灵Fruit::growFruit而不是水果的调用,这会导致各种不愉快。 (请注意,这是一个 C 风格的转换,这意味着它本质上是不安全的。不要使用它。)this
schedule_selector

于 2012-08-06T09:50:55.440 回答