2012-03-25 57 views
8

下面的C++代碼提供了一個錯誤,而編譯:爲什麼不使用class-keyword不能創建對象?

#include<iostream> 

using namespace std; 

class time 
{ 
     int hours; 
     int minutes; 
    public: 
     void gettime(int h, int m) 
     { hours = h; minutes = m; } 

     void puttime(void) 
     { 
      cout << hours << " hours and "; 
      cout << minutes << " minutes " << "\n"; 
     } 

     void sum(time, time); 
}; 

void time::sum(time t1, time t2) 
{ 
    minutes = t1.minutes + t2.minutes; 
    hours = minutes/60; 
    minutes = minutes % 60; 
    hours = hours + t1.hours + t2.hours; 
} 

int main() 
{ 
    time T1, T2, T3; // LINE NUMBER 32. 

    T1.gettime(2, 45); 
    T2.gettime(3, 30); 

    T3.sum(T2, T2); 

    cout << "T1 = "; T1.puttime(); 
    cout << "T2 = "; T2.puttime(); 
    cout << "T3 = "; T3.puttime(); 

    return 0; 
} 

以下錯誤,我越來越:

habeebperwad:~/study/cpp/eb$ g++ 5.7-objects-as-arguments.cpp 
5.7-objects-as-arguments.cpp: In function ‘int main()’: 
5.7-objects-as-arguments.cpp:32:7: error: expected ‘;’ before ‘T1’ 
5.7-objects-as-arguments.cpp:34:2: error: ‘T1’ was not declared in this scope 
5.7-objects-as-arguments.cpp:35:2: error: ‘T2’ was not declared in this scope 
5.7-objects-as-arguments.cpp:37:2: error: ‘T3’ was not declared in this scope 
habeebperwad:~/study/cpp/eb$ 

如果我的聲明前添加類的時間T1,T2,T3 ;',它工作正常。

爲什麼它不工作沒有

+0

您使用哪種編譯器? – Zeta 2012-03-25 14:22:35

+7

嘗試不使用名稱空間標準;(並明確限定所有內容)。 – 2012-03-25 14:23:35

+8

這可能與'std :: time'的衝突有關。 – Mankarse 2012-03-25 14:24:33

回答

15

您的編譯器定義std::time,因此它期待time(...);time;。類名稱time不明確,因此需要使用關鍵字class。爲了防止這種情況,請不要使用using namespace std;或重命名您的班級。

如果您刪除using namespace std;,請不要忘記將名稱空間限定符std::添加到cout

我建議,以使所有的編譯器警告(-Wall -Wextra以g ++),以防止今後發生這樣的錯誤,因爲GCC暗示這裏有些不對勁:

temp.cc:33:20:警告:表情:函數「time」的參考而非調用[-Waddress] temp.cc:33:20:Warning:Expression has no effect [-Wunused-value]

+0

很好的解釋。感謝您提供選項(-Wall -Wextra),以便我可以在將來找出任何問題。 – 2012-03-25 16:08:29

相關問題