gpt4 book ai didi

C++ 类和变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:16 24 4
gpt4 key购买 nike

我是 C++ 编程的新手。我正在研究类(class)是如何工作的,但我对以下代码有疑问:

#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: error: expected ‘;’ before ‘t’ classi.cpp:43:39: 错误:“t”未在此范围内声明

我对类有什么不太了解的地方吗?为什么它不能识别“时间”变量?

最佳答案

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

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++ 类和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17261412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com