Peterdk
Peterdk

Reputation: 16005

Private variable needs to be initialized only in constructor. How?

I have a class called Foo with a constructor that needs arguments, and a other class Bar with a Foo private variable

 class Foo 
 {
      public:
      Foo(string);
 }

 class Bar
 {
      public:
      Bar() { this->foo = Foo("test") }

      private:
      Foo foo;
 }

However, when I try to compile this, I get a compile error that there is no Foo::Foo() constructor. It looks like the private variable foo in class Bar gets initialized before getting a value assigned in the constructor.

How can I have a private foo variable that waits to gets initialized in my constructor?

Upvotes: 4

Views: 6561

Answers (2)

Jerry Coffin
Jerry Coffin

Reputation: 490048

Use an initializer list:

Bar() : foo("test") {}

BTW, in C++ reasons to use this-> are rare (and often indicate other problems).

Upvotes: 7

Donald Miner
Donald Miner

Reputation: 39893

You need to use an initializer list. If you don't, your code will call the default constructor for that object.

Bar::Bar() : foo("test") {
   // stuff
}

Upvotes: 9

Related Questions