我有一个类,它是一个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 ++会这样做,我该如何解决? 提前谢谢。
答案 0 :(得分:3)
changeInt( int newInt ); // Assume newInt = 5
从上一行中删除int
。
void doSomething( ); {
从上一行中删除;
。
更新:现在您错过了头文件末尾的;
。修复所有明显的错误(这可能使其无法编译),它对我来说很好。您粘贴的代码与实际代码之间仍然存在差异,或者您发现了编译器错误。
Constructor: myInt = 0
changeInt( int ) : myInt = 5
After constructor and calling changeInt(), myInt = 5
答案 1 :(得分:3)
schedule
的“selector”参数应为SEL_SCHEDULE
,其中
typedef void(CCObject::* SEL_SCHEDULE)(float)
即它应该是CCObject
的成员函数
它也应该是你在上调用schedule
的对象的成员,否则调用时的目标将是错误的。
我怀疑这个
this -> m_fruitSprite -> schedule( schedule_selector( Fruit::growFruit ), 1.0 );
调用Fruit::growFruit
,this
指向精灵,而不是水果,这会导致各种不愉快。
(注意schedule_selector
进行C风格的转换,这意味着它本身就不安全。不要使用它。)