【问题标题】:Digital clock c++数字时钟 C++
【发布时间】:2013-11-07 04:53:36
【问题描述】:

在 C++ 中制作数字时钟,但出现以下错误: 预期的 ;在重新开始之前 语句是对函数“时间”的引用,而不是调用 声明无效 ''reloj'' 未声明(首先使用此函数) 每个未声明的标识符对于它出现的每个函数只报告一次

#include<iostream>
#include<Windows.h>

using namespace std;
struct time
{
int hr,mint,seg;
};

int main()
{
time reloj;

reloj.hr = 0;
reloj.mint = 0;
reloj.seg = 0;
for(int i = 0; i<24; i++)
{
    if(reloj.hr == 23)
    {
        reloj.hr = 0;
    }
    for(int j = 0; j<60; j++)
    {
        if(reloj.mint == 59)
        {
            reloj.mint = 0;
        }
        for(int k = 0; k<60; k++)
        {
            if(reloj.seg == 59)
            {
                reloj.seg = 0;
            }
            cout<<reloj.hr<<" : "<<reloj.mint<<" : "<<reloj.seg<<endl;
            reloj.seg++;
            Sleep(1000);
            system("Cls");
        }
        reloj.mint++;
    }
    reloj.hr++;
}
}

【问题讨论】:

  • 我敢打赌这与std::time有关。
  • 你的“时钟”会因为睡眠时间太长而漂移(其他代码位需要时间以及睡眠时间最少的事实。有时会需要更多时间,因为执行另一个进程的计算机)
  • time => struct time 在声明中 reloj
  • 我得到了代码,编译它并且运行良好。我使用了 VS-2013 快递。你用的是什么编译器?此外,克里斯的建议似乎是可能的。尝试将您的结构重命名为“时间”以外的其他名称。

标签: c++ struct clock


【解决方案1】:

using namespace std; 在全局命名空间中是一个坏主意,并且可能会将std::time 连同许多其他名称一起倾倒在那里。这将与您的 time 课程发生冲突。

不幸的是,在这里简单地删除邪恶的using 并不是一个解决方案,因为time 来自C 库。无论您是否想要它们,实现都允许(并且许多实现)将 C 库中的名称转储到全局命名空间中。

所以你的选择是:

  • 重命名你的类,或者把它放在你自己的命名空间中;
  • 将其称为struct time 而不仅仅是time
  • 不要包含任何标准库标头,以防它们与您的全局名称混淆。

【讨论】:

    【解决方案2】:

    我有另一个代码:

    #include <iostream>
    #include <unistd.h>
    #include <ctime>
    
    using namespace std;
    
    void Timer()
    {
        int HOUR = 0, MINUTE = 0 , SECOND = 0;
    
        time_t now = time(0);
        tm *ltm = localtime(&now);
    
        HOUR = ltm->tm_hour;
        MINUTE = ltm->tm_min;
        SECOND = ltm->tm_sec;
    
        while(true)
        {
            system("clear");
            cout << HOUR << ":" << MINUTE << ":" << SECOND << endl;
            SECOND ++;
    
            if(SECOND == 60)
            {
                MINUTE++;
                SECOND = 0;
    
                if(MINUTE == 60);
                {
                    HOUR++;
                    MINUTE = 0;
    
                    if(HOUR ==24)
                    {
                        HOUR = 0;
                    }
                }
            }
    
            sleep(1);
        }
    }
    
    int main()
    {
        Timer();
    }
    

    *如果你在 WINDOWS 上使用它,那么将 system("clear") 更改为 system("cls")

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-07
      相关资源
      最近更新 更多