更明确的是,当我在使用()创建对象时尝试访问实例变量时出现编译时错误,但是当我不这样做时,代码将按预期编译并运行。此外,此问题仅适用于默认构造函数。 我想了解原因。
using namespace std;
#include <iostream>
class Student {
public:
int gpa;
Student() {
gpa = 4;
}
Student( int x ) {
gpa = x;
}
};
int main() {
Student zero;
Student sally( 2 );
Student jack();
cout << zero.gpa << endl; //prints 4
cout << sally.gpa << endl; // prints 2
cout << jack.gpa << endl; //error: request for member 'gpa' in 'jack', which is of non-class type 'Student()'
}
答案 0 :(得分:8)
问题是Student jack();
声明了一个以Student
作为返回类型的函数。它没有像你期望的那样声明该类的对象。
答案 1 :(得分:6)
答案 2 :(得分:3)
“对象b();”声明一个函数b()返回一个Object类型的对象,而“Object b;”定义了Object类型的变量b。
不,这并不明显,如果我在C ++,Java和C#之间切换,它仍然会回来咬我。 : - )
答案 3 :(得分:2)
Object b()之间有什么区别;和对象b;?
存在差异是因为C ++将其解释为正在声明的函数,而不是正在创建的对象。
Object b;
这是通过默认构造函数创建的类b
的对象Object
。
Object b();
这是函数b()
,被声明(它将在别处定义)返回类Object
的对象,而没有参数。
希望这有帮助。
答案 4 :(得分:0)
我会尝试这个
班级学生{
公共:
int gpa = 4;
Student() { };