Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Constructor issue [duplicate]

Tags:

c++

Possible Duplicate:
Default constructor with empty brackets

This is the code that I worked on and I don't understand what it's happening on constructor Package obj2(); On output are displayed only the values 4 (Package obj1(4)) and 2 (Package obj3(2))

#include <iostream>
using namespace std;
class Package
{
private:
    int value;
public:
    Package()
    {
        cout<<"constructor #1"<<endl;
        value = 7; cout << value << endl;

    }
    Package(int v)
    {
        cout<<"constructor #2"<<endl;
        value = v; cout << value << endl;

    }
    ~Package()
    {
        cout<<"destructor"<<endl;
        cout << value << endl;
    }
};

int main()
{
    Package obj1(4);
    Package obj2();
    Package obj3(2);

}
like image 490
laura Avatar asked Nov 06 '12 17:11

laura


2 Answers

This does not declare an object:

Package obj2();

Believe it or not, it declares a function that returns a Package object. It's called "the most vexing parse."

like image 158
Fred Larson Avatar answered Sep 21 '22 20:09

Fred Larson


Line

Package obj2();

needs to be

Package obj2;

More info

http://www.parashift.com/c++-faq/empty-parens-in-object-decl.html

or, alternative take on this (from Google cache, real site was down, and take it with a grain of salt, it raises good points but does its best to make them sound worse than they are):

http://webcache.googleusercontent.com/search?q=cache:http://yosefk.com/c%2B%2Bfqa/ctors.html#fqa-10.2

like image 39
hyde Avatar answered Sep 20 '22 20:09

hyde