嘿所以我正在使用Windows GetTickCount()和STL进行秒表课程,但遇到了一个问题,即在将Stopwatch(int DecNumb)构造函数实现到重载Stopwatch(int DecNumb,char命令[ ])后一个构造函数中未正确设置“准确性”数据类型。
(它似乎返回到unsigned long int 560345的前一个值或者什么......)
这是我用来测试它的class和main()命令:
class Stopwatch
{
protected:
int accuracy;
unsigned long int initial_ilu;
unsigned long int current_ilu;
long float output_fl;
vector<long float> times;
public:
Stopwatch(int DecNumb) { // so accuracy*10 isn't 0
accuracy = 1;
for(;DecNumb>0;DecNumb--) // the Tick count will
accuracy = accuracy*10;}; // diveded by accuracy (each 0 in this number moves the decimal over once)
Stopwatch(int aDecNumb, char command[]) {Stopwatch::Stopwatch(aDecNumb);
if(command = "start") Stopwatch::Start();};
void Start(){initial_ilu = GetTickCount()/*/accuracy*/;};
long float ElapsedTime()
{
current_ilu = GetTickCount()/*/accuracy*/;
output_fl = (current_ilu - initial_ilu)/accuracy;
return output_fl;
};
void Wait(long float seconds)
{
for(unsigned long int waitTime = GetTickCount() + (seconds*accuracy);
waitTime > GetTickCount();) {}
// stay stuck in for loop until time specified is up
};
void SaveTime(){times.push_back(GetTickCount()/*/accuracy*/);};
long float GetTime(int location){if(times.size()<location+1) return times[location+1];
else return -1;};
};
这是主要的()
int main()
{
Stopwatch myStopwatch(3,"start");
for(;;)
{
myStopwatch.Wait(2);
cout << myStopwatch.ElapsedTime() << endl;
}
return 0;
}
为什么精度不能保持在我在构造函数中设置的值? 谢谢! =) 哦,欢迎任何其他反馈我的代码! (我很新)
答案 0 :(得分:5)
Stopwatch::Stopwatch(aDecNumb);
这不会调用其他构造函数;它甚至不是有效的C ++。
您不能从另一个构造函数中为同一个对象调用一个构造函数。在创建对象期间只调用一个构造函数(当然不包括基类或成员构造函数)。
但这里并不需要两个构造函数;一个就足够了:
Stopwatch(int DecNumb, char* command = 0) {
accuracy = 1;
for(; DecNumb > 0; DecNumb--) {
accuracy = accuracy * 10;
}
if (command && std::string(command) == "start") {
Start();
}
}
如果你真的需要两个构造函数,最好的办法是使用一个执行多个构造函数通用的初始化的基类,或者使用可以从多个构造函数调用的“初始化”成员函数。
答案 1 :(得分:0)
秒表(int aDecNumb,char命令[]){秒表::秒表(aDecNumb); if(command =“start”)秒表:: Start();};
//秒表::秒表(aDecNumb);用于在类定义之外声明一个构造函数,这里的利用率是错误的,它没有做任何事情。
如果你真的想要初始化构造函数,你可以构建一个类并将其用作接口/或作为基类添加派生。