C++ променливите не се променят

Имам клас Timer, но всеки път, когато се опитам да променя стойност на която и да е променлива, променливата просто остава на нула. SDL_GetTicks() връща стойността, която трябва, но когато се опитам да присвоя тази стойност на променлива, тази променлива остава на нула. Опитах твърдо кодиране в числа и променливата все още остава на нула. Променливите в моя Main клас работят добре, но когато се опитам да променя някоя от тези в този, не работи. Освен това методът timeSinceCreation() също връща нула.

#include "Timer.h"
#include "SDL.h"

Timer::Timer() : m_timeOfLastCall(0.0f)
{
SDL_Init(SDL_INIT_TIMER);
}

Timer::~Timer() {}

float Timer::timeSinceCreation()
{
 return SDL_GetTicks();
 }

float Timer::timeSinceLastFrame()
{
 float thisTime = timeSinceCreation();
 float deltaTime = thisTime - m_timeOfLastCall;
m_timeOfLastCall = thisTime;
printf("%u ms \n", thisTime );
return deltaTime;
}

person user2117614    schedule 27.02.2013    source източник
comment
Може ли резултатът ви да е грешен? Опитайте: printf("%.8e ms\n"); или погледнете документацията за низове във формат stdio.   -  person Brett Hale    schedule 28.02.2013
comment
Изказването ви изглежда объркващо за мен. Казвате, че SDL_GetTicks() връща правилна стойност, а timeSinceCreation() връща нула.   -  person Mahesh    schedule 28.02.2013


Отговори (1)


Вашият код има недефинирано поведение, защото вашето printf повикване има несъответстващ тип (%u изисква unsigned int, но вие предавате float). В резултат на това не трябва да очаквате никакво разумно поведение.

person Mankarse    schedule 28.02.2013
comment
Аха! Благодаря ви, промених го на %f и сега работи чудесно! Благодаря! - person user2117614; 28.02.2013
comment
@user2117614: Всъщност, ако бях на твое място, щях да променя типовете на всички променливи на Uint32, което е типът на стойностите, върнати от SDL_GetTicks. - person Mankarse; 28.02.2013