0

嘿,所以我正在使用 windows GetTickCount() 和 STL 处理秒表类,但是在将 Stopwatch(int DecNumb) 构造函数实现到重载 Stopwatch(int DecNumb, char command[]) 时遇到了问题后一个构造函数中的“准确度”数据类型设置不正确。

(它似乎回到了 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;};

    };

这是 main()

int main()
    {
        Stopwatch myStopwatch(3,"start");
        for(;;)
        {
            myStopwatch.Wait(2);
            cout << myStopwatch.ElapsedTime() << endl;
        }
                return 0;
    }

为什么精度不能保持在我在构造函数中设置的值?谢谢!=) 哦,欢迎对我的代码提供任何其他反馈!(我比较新)

4

2 回答 2

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();
    }
}

如果您确实需要两个构造函数,最好的选择是使用执行多个构造函数通用的初始化的基类,或者使用可以从多个构造函数调用的“初始化”成员函数。

于 2011-05-12T06:30:06.770 回答
0

秒表(int aDecNumb,char 命令[]){秒表::秒表(aDecNumb);if(command = "start") 秒表::Start();};

//秒表::秒表(aDecNumb); 用于在类定义之外声明一个构造函数,这里这种利用是错误的,它什么也没做。

如果您真的想初始化构造函数,您可以构建一个类并将其用作接口/或作为基类添加派生自它。

于 2011-05-12T07:38:35.080 回答