Object b()之间有什么区别;和对象b;?

时间:2013-06-28 20:43:09

标签: c++ class instance-variables default-constructor

更明确的是,当我在使用()创建对象时尝试访问实例变量时出现编译时错误,但是当我不这样做时,代码将按预期编译并运行。此外,此问题仅适用于默认构造函数。 我想了解原因。

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()'

}

5 个答案:

答案 0 :(得分:8)

问题是Student jack();声明了一个以Student作为返回类型的函数。它没有像你期望的那样声明该类的对象。

答案 1 :(得分:6)

  Student jack();

声明一个返回student并且不带参数的函数。不是一个对象!

在此gotw

中查看更多内容

答案 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() { };