2013-07-19 15 views
0

我有,VISUAL C++不知道函數的返回值,它是一個用戶定義的類

time.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 

time.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 

什麼是問題?

編輯:新代碼來解決命名衝突

time.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) 
{ 
} 
+0

由於預編譯頭處理,通常會忽略行'#include「stdafx.h」'以上的任何內容。 –

回答

1

有名爲time.h標準庫的頭文件。這可能是因爲無論是

  • 你包括系統頭文件,當你想你自己的,或
  • 系統頭文件在你的,當他們想要的標準一個

或兩者拉動。爲您的標題找到不同的名稱。

此外,全局名稱空間中的標識符time由標準庫中的函數使用(因此錯誤爲function "time" is not a type name)。因此,把你的名字空間或改變類名稱。

具體,你的錯誤被忽略了這條規則,在17.6.4.3.3發現造成的:

從外部鏈接的聲明的標準C庫中的每個名稱被保留到實現用作名字與外部「C」連接,在命名空間std和全局命名空間。

通過外部鏈接聲明的標準C庫中的每個函數簽名都保留給該實現,以用作連接extern "C"extern "C++"鏈接的函數簽名,或作爲全局名稱空間中名稱空間作用域的名稱。

+0

以前的錯誤解決了,現在enum pmORam p;在time.cpp得到這個錯誤,當我使用p: 「表達式必須有類的類型」,什麼是問題? – user197508

+0

@ user197508:你是否解決了名稱衝突的問題?我看不到您的代碼的新版本。您可以將其添加到問題中,將其標記爲「編輯:修復命名衝突的新代碼」,並將舊代碼保留在此處。 –

+0

是的,我修正了這個問題。 – user197508

相關問題