2011-01-28 68 views
2

找到,因为下面给出我的代码的执行时间,我已经写了Timer类。C++:问题找到代码执行时间

Timer::StartTimer(); 
DoOperation(); 
cout<<"Time elapsed: "<<Timer::GetTime(); 

我得到错误,说明startTime和endTime是未定义的。我无法完全解决问题。你能帮忙吗?

文件文件:timer.h

#include <sys/time.h> 

class Timer 
{ 
    static timeval startTime, endTime; 

public: 
    static void StartTimer(); 
    static long int GetTime(); 
}; 

文件:Timer.cc

#include "Timer.h" 

void Timer::StartTimer() 
{ 
    gettimeofday(&startTime, NULL); 
} 

long int Timer::GetTime() 
{ 
    long int seconds, useconds, mtime; 
    gettimeofday(&endTime, NULL); 
    seconds = endTime.tv_sec - startTime.tv_sec; 
    useconds = endTime.tv_usec - startTime.tv_usec; 
    mtime = ((seconds) * 1000 + useconds/1000.0) + 0.5; 
    return(mtime); 
} 
+1

你包括Timer.h在你的计划?你链接到Timer的实现? – wich 2011-01-28 11:54:41

+0

是的,我包括和链接。 – Nemo 2011-01-28 11:56:05

回答

9

在timer.cc你需要:

timeval Timer::startTime; 
timeval Timer::endTime; 

看到这个FAQ

由于别人有宝inted可能性,但使这一切静态是“不寻常”的设计,如果你试图同时使用在多个地方的代码可能会导致问题。可能你想让它不是静态的,并且在使用它时有一个实例。

1

我认为你会使用一个命名空间,而不是类的更好,如果一切是静态

您需要定义定时器::结束时间和定时器::开始时间

4

您需要实例静态成员变量。

添加到您的Timer.cc

timeval Timer::startTime; 
timeval Timer::endTime;