C++ 头库循环依赖项

C++ 头库循环依赖项,c++,templates,dependencies,C++,Templates,Dependencies,我一直在开发一个简单的只包含标题的库,但我遇到了一个循环问题,我无法理解。我按类型返回,prob没有帮助 template<typename T> class Foo; class Bar; class Baz { public: template<typename T> T getAFoo<T>() { return Foo<T>(); } Bar getABar() // Prefer re

我一直在开发一个简单的只包含标题的库,但我遇到了一个循环问题,我无法理解。我按类型返回,prob没有帮助

template<typename T>
class Foo;

class Bar;


class Baz
{
public:

   template<typename T>
   T getAFoo<T>()
   {
      return Foo<T>();
   }


   Bar getABar() // Prefer return by type in this situation.
   {
      return Bar(); // Error.
   }
};

template<typename T>
class Foo {
   /* ... */
   void doSomething() { m_baz.something(); }
   Baz &m_baz;
};

class Bar {
   /* ... */
   void doSomething() { m_baz.something(); }
   Baz &m_baz;
};
模板
Foo类;
分类栏;
Baz类
{
公众:
模板
T getAFoo()
{
返回Foo();
}
Bar getABar()//在这种情况下更喜欢按类型返回。
{
返回条();//错误。
}
};
模板
福班{
/* ... */
void doSomething(){m_baz.something();}
巴兹&穆巴兹;
};
分类栏{
/* ... */
void doSomething(){m_baz.something();}
巴兹&穆巴兹;
};
我尝试对函数
Bar getABar()
进行原型化,然后在
Bar
定义之后对其进行定义,但这只会产生重复的符号错误


有点觉得我只需要它是一个没有价值的模板。

我也很抱歉。这个怎么样:

template<typename T>
class Foo;

class Bar;

class Baz
{
public:

    template<typename T>
    T getAFoo()
    {
        return Foo<T>();
    }

    void something(){}

    inline Bar getABar();
};

template<typename T>
class Foo {
    /* ... */
    void doSomething() { m_baz.something(); }
    Baz &m_baz;
};

class Bar {
public:
    Bar(Baz& baz)
        :m_baz(baz)
    {
    }
    /* ... */
    void doSomething() { m_baz.something(); }
    Baz &m_baz;
};

Bar Baz::getABar()
{
    return Bar(*this);
}
模板
Foo类;
分类栏;
Baz类
{
公众:
模板
T getAFoo()
{
返回Foo();
}
使某物无效(){}
内联栏getABar();
};
模板
福班{
/* ... */
void doSomething(){m_baz.something();}
巴兹&穆巴兹;
};
分类栏{
公众:
酒吧(巴兹和巴兹)
:m_baz(baz)
{
}
/* ... */
void doSomething(){m_baz.something();}
巴兹&穆巴兹;
};
Bar Baz::getABar()
{
返回条(*本条);
}

你应该考虑这个线程。对不起,我应该提到FoO和Bar需要使用BAZ。因此,我们需要的不仅仅是它们的尺寸。我已经更新以在问题中反映这一点。@PhilCK,我已经修改了它。