我很困惑,因为一个变量(燃料)正在变成0和#34;它确实不是真的,因为计算机不是神奇的生物。但是,我一直检查变量的使用,并没有出现任何奇怪的现象。但是,当它是,它从一个线程到另一个线程。以下是代码的一部分:
主要
dataCollectorFTL dataCollector1;
...
expertModule expertModule1(dataCollector1, gazeCoordinate1, communicationModule1);
在expertModule .h:
public:
dataCollectorFTL& theDataCollector;
communicationModule& theCommunicationModule;
...
std::chrono::steady_clock::time_point lastRefresh;
bool isFighting;
int previousEnemyHull;
long fuel;
...
expertModule::expertModule(dataCollectorFTL &aDataCollectorFTL, gazeCoordinate &aGazeCoordinate, communicationModule &aCommunicationModule);
然后,在expertModule.cpp中:
expertModule::expertModule(dataCollectorFTL &aDataCollectorFTL, gazeCoordinate &aGazeCoordinate, communicationModule &aCommunicationModule) : theDataCollector(aDataCollectorFTL) , theGazeCoordinate(aGazeCoordinate) , theCommunicationModule(aCommunicationModule) {
isFighting = false;
lastRefresh = std::chrono::steady_clock::now();
fuel = theDataCollector.dataFuel;
}
...
if (std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::steady_clock::now()-lastRefresh).count()>500){
if (isFighting && ( expertModule::fuel =! theDataCollector.dataFuel || theDataCollector.dataEnemyHull == 0)){
isFighting = false;
previousEnemyHull = theDataCollector.dataEnemyHull;
} else if (!isFighting && theDataCollector.dataEnemyHull != previousEnemyHull ) {
isFighting = true;
expertModule::fuel = theDataCollector.dataFuel;
}
std::cout<<expertModule::fuel<<std::endl;
std::cout<<theDataCollector.dataFuel<<std::endl;
lastRefresh = std::chrono::steady_clock::now();
}
使用此代码,expertModule变量&#34; fuel&#34;值得初始化时的确切值,然后在DataCollector.dataFuel没有变化的情况下变为0。
感谢您的帮助
答案 0 :(得分:0)
我只能给你建议如何调试它。一个也可以改进设计的选项是将变量设为私有,并引入一个setter setFuel
。在每次调用setter时,您都可以打印变量或包含断言。我想你可以用这种方式很快找到错误。