如何从外部类构造成员类对象(c ++)

时间:2017-08-03 11:46:22

标签: c++

我有一些看起来像这样的东西:

class Foo
{
    public:
        Foo(parameter);
}

class Bar
{
    Foo fooObject;
}

Bar::fooObject(data);

但我明白了:

  

错误:在'('token

之前的预期构造函数,析构函数或类型转换

所以我的问题是:如何从Bar外部构造fooObject?

2 个答案:

答案 0 :(得分:1)

您可以拥有一个构造函数,该构造函数从类外部获取Foo的实例,然后您可以将该实例复制或移动到您的成员变量中。另一种方法是采用必需的参数来构造Foo的实例,然后使用成员初始化列表来构造成员变量。

class Bar
{
public:
   Bar(const Foo& foo) // Copy
      : fooObject(foo)
   {
   }

   Bar(Foo&& foo) // Move
      : fooObject(std::move(foo))
   {
   }

   Bar(int example)
      : fooObject(example)
   {
   }

private:
   Foo fooObject;
}

答案 1 :(得分:1)

使用构造函数和成员初始化列表初始化成员:

class Foo{
public:
    Foo(int x);
};

class Bar{
public:
    Bar(int param);
private:
    Foo fooObject;
};

Bar::Bar(int param) : fooObject(param){};

如果在类之外是指类成员函数定义,那么您将使用以下语法进入源(.cpp)文件:

Bar::Bar(int param) : fooObject(param){};  // ctor definition outside the class

声明可以放在头文件中。