1

用 C++ 制作一个数字时钟,我得到这些错误:在 reloj 语句是对函数的引用而不是调用之前 'time' 语句没有效果 ''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++;
}
}
4

2 回答 2

1

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

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

所以你的选择是:

  • 重命名你的类,或者把它放在你自己的命名空间中;
  • 将其称为struct time而不仅仅是time;
  • 不要包含任何标准库头文件,以防它们与您的全局名称混淆。
于 2013-11-07T08:13:25.430 回答
0

我有另一个代码:

#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 上使用它,则将系统(“清除”)更改为系统(“cls”)

于 2021-05-02T15:52:26.150 回答