0

我有,

时间.h:

#pragma once
#ifndef TIME_H
#define TIME_H
class time
{
private:
    int hour;
    int minute;
    int second;
public:
    enum pmORam {am,pm};
    time(void);
    time(int,int,int);
    void printtime(void);
    time subtime(time &);
    const time &operator=(const time &);
    void setTime(int,int,int);
    ~time(void);
};
#endif

时间.cpp:

#include <iostream>
#include <iomanip>
#include "stdafx.h"
#include "time.h"



using namespace std;


time::time(void)
{
    hour=0;
    minute=0;
    second=0;
}
time::time(int hr,int min,int sec)
{
    setTime(hr,min,sec);
}

void time::printtime(void)
{
    enum pmORam p;

    if(hour<=12 && hour>=0)
        cout<<setfill('0')<<setw(2)<<hour<<":"<<setw(2)<<minute<<":"<<setw(2)<<second<<p.am<<endl;
    else 
        if(hour>12 && hour<=23)
        {
            hour=hour%12;
            cout<<setfill('0')<<setw(2)<<hour<<":"<<setw(2)<<minute<<":"<<setw(2)<<second<<p.pm<<endl;
        }
}
const time &time::operator=(const time &t)
{
    hour=t.hour;
    minute=t.minute;
    second=t.second;
    return *this;
}
time time::subtime(time &m)
{
    if(hour>m.hour)
    {
        if(m.second>second)
        {
            minute=minute-1;
            second=(second+60)-m.second;
        }
        second=second-m.second;
        if(m.minute>minute)
        {
            hour=hour-1;
            minute=(minute+60)-m.minute;
        }
        minute=minute-m.minute;
        hour=hour-m.hour;
    }
    if(second>m.second)
    {
        m. minute=m.minute-1;
        m.second=(m.second+60)-second;
    }
    m.second=m.second-second;
    if(minute>m.minute)
    {
        m.hour=m.hour-1;
        m.minute=(m.minute+60)-minute;
    }
    m.hour=hour-m.hour;
    return *this;
}
void time::setTime(int hr,int min,int sec)
{
    hour=(hr>=0 && hr<=23)? hr: 0;
    minute=(min>=0 && min<60)? min:0;
    second=(sec>=0 && sec<60)? sec:0;
}
time::~time(void)
{
}

但是在 time.cpp 中,我遇到了这个错误:

 IntelliSense: declaration is incompatible with "time time::subtime(time &)"
 IntelliSense: declaration is incompatible with "const time &time::operator=(const time &)"
'time::time(const time &)' : cannot convert parameter 1 from 'time *const ' to 'const time &' 
'int time::subtime(time &)' : overloaded function differs only by return type from 'time time::subtime(time &)'
'int &time::operator =(const time &)' : overloaded function differs only by return type from 'const time &time::operator =(const time &)'
function "time" is not a type name

什么是问题?

编辑:修复命名冲突的新代码

时间.cpp:

#include <iostream>
#include <iomanip>
#include "stdafx.h"
#include "time.h"



using namespace std;


timea::timea(void)
{
    hour=0;
    minute=0;
    second=0;
}
timea::timea(int hr,int min,int sec)
{
    setTime(hr,min,sec);
}

void timea::printtime(void)
{
    enum timea::pmORam p;

    if(hour<=12 && hour>=0)
        cout<<setfill('0')<<setw(2)<<hour<<":"<<setw(2)<<minute<<":"<<setw(2)<<second<<p.am<<endl;
    else 
        if(hour>12 && hour<=23)
        {
            hour=hour%12;
            cout<<setfill('0')<<setw(2)<<hour<<":"<<setw(2)<<minute<<":"<<setw(2)<<second<<p.pm<<endl;
        }
}
const timea &timea::operator=(const timea &t)
{
    hour=t.hour;
    minute=t.minute;
    second=t.second;
    return *this;
}
timea timea::subtime(timea &m)
{
    if(hour>m.hour)
    {
        if(m.second>second)
        {
            minute=minute-1;
            second=(second+60)-m.second;
        }
        second=second-m.second;
        if(m.minute>minute)
        {
            hour=hour-1;
            minute=(minute+60)-m.minute;
        }
        minute=minute-m.minute;
        hour=hour-m.hour;
    }
    if(second>m.second)
    {
        m. minute=m.minute-1;
        m.second=(m.second+60)-second;
    }
    m.second=m.second-second;
    if(minute>m.minute)
    {
        m.hour=m.hour-1;
        m.minute=(m.minute+60)-minute;
    }
    m.hour=hour-m.hour;
    return *this;
}
void timea::setTime(int hr,int min,int sec)
{
    hour=(hr>=0 && hr<=23)? hr: 0;
    minute=(min>=0 && min<60)? min:0;
    second=(sec>=0 && sec<60)? sec:0;
}
timea::~timea(void)
{
}
4

1 回答 1

1

标准库中有一个名为time.h. 很可能

  • 当您想要自己的头文件时,您正在包含系统头文件,或者
  • 当他们想要标准头文件时,系统头文件正在拉入您的头文件

或两者。为您的标题找到不同的名称。

此外,time标准库中的函数使用全局命名空间中的标识符(因此出现错误function "time" is not a type name)。因此,将您的放在命名空间中或更改类名。

具体来说,您的错误是由于忽略了 17.6.4.3.3 中的这条规则造成的:

使用外部链接声明的标准 C 库中的每个名称都保留给实现,以用作名称空间std和全局名称空间中具有外部“C”链接的名称。

使用外部链接声明的标准 C 库中的每个函数签名都保留给实现,以用作具有extern "C"extern "C++"链接的函数签名,或作为全局命名空间中命名空间范围的名称。

于 2013-07-19T20:16:38.767 回答