1

我的课有点问题。我有两个类都使用模板方法,因此我必须把它放在标题中。这是一个例子。我希望它能够正确编译而不会出现“前向声明不完整”的问题。我明白出了什么问题,但我不知道如何纠正这个问题。感谢你们。

类.h

    class A;
    class B;

    class A
    {
        B *foo;

        template <class T>
        void func()
        {
            foo->fanc();   
        }
    }

    class B
    {
       A *foo;

       void fanc();

       template <class T>
       void osef()
       {
            foo->func<int>();
       }
    }
4

1 回答 1

3

你有一个循环依赖。您不能声明不完整类的对象。您可以通过声明指向不完整类的指针或引用来解决此问题。

class A
{
    B* foo;

或者

class A
{
    B& foo;

在后一种情况下,您必须使用构造函数的成员初始化列表来初始化引用。


如果您使用的是指针,那么您应该将 memeber 函数的定义移到不完整类的定义之后。

class A;
class B;

class A
{
    B* foo;
    template <class T>
    void func();
};

class B
{
  // ...
};

template <class T>
inline void A::func()
^^^^^^                   // If you need to include the header in more than one source file.
{
    foo->fanc();   
}
于 2013-05-08T14:06:22.917 回答