C类和变量

前端之家收集整理的这篇文章主要介绍了C类和变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对C编程比较陌生.我正在研究类如何工作,我遇到以下代码的问题:
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class time
  6. {
  7. public:
  8. time();
  9. void settime (int,int,int);
  10. void printuniversal ();
  11. void printstandard ();
  12. private:
  13. int hour;
  14. int minute;
  15. int second;
  16. };
  17.  
  18. time::time()
  19. {
  20. hour = minute = second = 0;
  21. }
  22.  
  23. void time::settime (int h,int m,int s)
  24. {
  25. hour = (h >= 0 && h < 24) ? h : 0;
  26. minute = (m >= 0 && m < 60) ? m : 0;
  27. second = (s >= 0 && s < 60) ? s : 0;
  28. }
  29.  
  30. void time::printuniversal()
  31. {
  32. cout << hour << ":" << minute << ":" << second << ":" << endl;
  33. }
  34.  
  35. void time::printstandard()
  36. {
  37. cout << ((hour == 0 || hour == 12) ? 12 : hour % 12) << ":" << minute << ":" << second << (hour < 12 ? "AM" : "PM") << endl;
  38. }
  39.  
  40. int main ()
  41. {
  42. time t;
  43. cout << "Initial universal time: " << t.printuniversal();
  44. cout << "\nInitial standard time: " << t.printstandard();
  45. t.settime(13,27,6);
  46. cout << "\nNew universal time: " << t.printuniversal();
  47. cout << "\nNew standard time: " << t.printstandard();
  48. return 0;
  49. }

我得到的错误是:
classi.cpp:42:6:错误:预期’;’在’t’之前
classi.cpp:43:39:错误:’t’未在此范围内声明

有什么我对课程不太了解吗?为什么它不识别“时间”变量?

解决方法

这应该教你不要使用令人讨厌的使用指令,例如:
  1. using namespace std;

尤其不是在命名空间范围内(如果在头文件中更糟糕).标准库中有一个名为std::time()函数,其名称与您的类型名称冲突.

这种歧义可以通过在t的声明中使用class关键字来解决

  1. class time t;

但是,更好的方法删除using指令并从标准命名空间中限定实体的名称,从而编写(例如):

  1. std::cout << "Initial universal time: "
  2. // ^^^^^

请注意,这可能还不够,因为允许库实现将C标准库中的实体放在全局命名空间中.在这种情况下,删除讨厌的using指令无助于解决歧义.

因此,我还建议避免让自己的实体(类型,函数,变量……)与标准库中的实体同名,或者至少将它们放在您自己的命名空间中.

而且,表达式如:

  1. cout << "Initial universal time: " << t.printuniversal();
  2. // ^^^^^^^^^^^^^^^^^^^^^
  3. // printuniversal() returns void!

由于printuniversal()返回void,因此格式错误.你应该这样做:

  1. cout << "Initial universal time: ";
  2. t.printuniversal();

当然,这同样适用于所有类似的表达

猜你在找的C&C++相关文章