C类和变量

前端之家收集整理的这篇文章主要介绍了C类和变量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对C编程比较陌生.我正在研究类如何工作,我遇到以下代码的问题:
#include <iostream>

using namespace std;

class time
{
public:
time();
void settime (int,int,int);
void printuniversal ();
void printstandard ();
private:
int hour;
int minute;
int second;
};

time::time()
{
hour = minute = second = 0;
}

void time::settime (int h,int m,int s)
{
hour = (h >= 0 && h < 24) ? h : 0;
minute = (m >= 0 && m < 60) ? m : 0;
second = (s >= 0 && s < 60) ? s : 0;
}

void time::printuniversal()
{
cout << hour << ":" << minute << ":" << second << ":" << endl;
}

void time::printstandard()
{
cout << ((hour == 0 || hour == 12) ? 12 : hour % 12) << ":" << minute << ":" << second                             << (hour < 12 ? "AM" : "PM") << endl;
}

int main ()
{
time t;
cout << "Initial universal time: " << t.printuniversal();
cout << "\nInitial standard time: " << t.printstandard();
t.settime(13,27,6);
cout << "\nNew universal time: " << t.printuniversal();
cout << "\nNew standard time: " << t.printstandard();
return 0;
}

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

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

解决方法

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

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

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

class time t;

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

std::cout << "Initial universal time: "
// ^^^^^

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

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

而且,表达式如:

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

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

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

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

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