为什么不使用class关键字就无法创建对象
Why objects cannot be created without using class-keyword?
以下C++代码在编译时出错:
#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;"之前添加类,它运行良好。
为什么没有类就不能工作?
编译器定义了std::time
,因此它需要time(...);
或time;
。类名time
不明确,因此需要关键字class
。为了防止这种情况,不要使用using namespace std;
或重命名您的类。
如果删除了using namespace std;
,请不要忘记将名称空间限定符std::
添加到cout
。
我建议启用所有编译器警告(g++中的-Wall -Wextra
),以防止将来出现此类错误,因为GCC暗示存在错误:
temp.cc:33:20:警告:表达式是函数»time«[-Wadress]的引用,而不是调用temp.cc:33:20:警告:表达式无效[-Wunused值]
相关文章:
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何创建对象函数指针C++映射?
- C++创建对象数组
- 在 C++ 的 Switch Case 中创建对象后对对象调用方法
- 如何获取在 main() 函数中构造的类的创建对象?
- 基于文件中的条目创建对象
- 错误:创建对象后无法分配区域
- C++ 通过输入创建对象
- 堆还是堆栈用于创建对象?
- 使用 C++ 创建对象数组
- 使用unique_ptr创建对象
- C++递归地在类构造函数中创建对象
- 通过向构造函数其他对象引用页面来创建对象
- ReactiveX (rx) - 在对象上应用可观察对象,而不是在可观察对象中创建对象
- 如何在OSX上正确创建C++对象文件(.o)
- 编译器是否会创建vtable,而不考虑在c++中创建对象
- 我如何在参考上使用数据成员而不使用新关键字创建对象
- 为什么不使用class关键字就无法创建对象
- 为什么当我们使用关键字创建对象时不调用析构函数"NEW"?
- new操作符——在c++中使用new关键字和不使用new关键字创建对象的区别