To be more explicit, I get a compile time error when I try accessing an instance variable when I create an object using (), but when I don\'t, the code compiles and runs as expe
The problem is that Student jack();
declares a function with Student
as a return type. It doesn't declare an object of that class as you expect.
Student jack();
declares a function that returns student and takes no arguments. Not an object!
See more in this gotw
What is the difference between Object b(); and Object b;?
The difference exists because C++ interprets that as a function being declared, instead of an object being created.
Object b;
This is the object b
of class Object
being created by means of the default constructor.
Object b();
This is the function b()
, being declared (it will be defined elsewhere) to return an object of class Object
, and no parameters.
Hope this helps.
I would try this
class Student {
public:
int gpa = 4;
Student() { };
"Object b();" declares a function b() returning an object of type Object, while "Object b;" defines a variable b of type Object.
No, it's not obvious, and it still comes back to bite me if I switch between C++, Java, and C#. :-)