2011-01-28 63 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;