0

と言う2つのクラスがfooありbarます。のコンストラクターはfoo、クラスがそれをインスタンス化することprivateのみを許可するためのものです。bar

// foo.h   
class foo
{
  friend class bar;
private:
  foo()
  {}
};

// bar.h
class bar
{
public:
  bar()
  {
    foo* f = new foo();
  } 
};

また、私は使用していますboost::shared_ptrが、簡単にするためにここでは言及しませんでした

ただし、プログラムをビルドしようとすると、エラーが発生します

'typename boost::detail::sp_if_not_array::type boost::make_shared() のインスタンス化 [with T = bar; typename boost::detail::sp_if_not_array::type = boost::shared_ptr]':| /home/..../Projects/CodeBlocks/../bar.cpp|18|ここから必須| /home/..../Projects/CodeBlocks/../foo.h|23|エラー: 'foo::foo()' は非公開です| ||=== ビルドが終了しました: 1 つのエラー、2 つの警告 (0 分、5 秒) ===|

bar.h が最初にビルドされるためですか?もしそうなら、これを修正する方法に関する提案はありますか?

4

1 に答える 1