C++ 是否正向声明需要返回到原始类的模板类?

C++ 是否正向声明需要返回到原始类的模板类?,c++,C++,我该如何解开这个结?如果有必要的话,我将使用VisualStudio作为编译器。显然,我们可以将MOO移动到其他类并将其他类向上移动,但这是一个针对现实中正在发生的更复杂问题的模型。我认为这里需要一个前瞻性的定义,但我不确定如何构建它 这个结可以解开吗,或者我必须把sampClass分成两个类,或者一个有接口的类 #include <iostream> class sampClass { public: template <typename Z> othe

我该如何解开这个结?如果有必要的话,我将使用VisualStudio作为编译器。显然,我们可以将MOO移动到其他类并将其他类向上移动,但这是一个针对现实中正在发生的更复杂问题的模型。我认为这里需要一个前瞻性的定义,但我不确定如何构建它

这个结可以解开吗,或者我必须把sampClass分成两个类,或者一个有接口的类

#include <iostream>
class sampClass
{
public:
    template <typename Z>
    otherClass<Z> potato()
    {
        return otherClass<Z>(this);

    }
    sampClass(int a)
    {
        m_a = a;
    }
    void moo()
    {
        std::cout << "MOO!";
    }
    int m_a;
};

template <typename T>
class otherClass
{
public:
    otherClass(sampClass* doMoo)
    {
        doMoo->moo();
    }
};


int main()
{
    sampClass a(5);
    a.potato<int>();
    return 0;
}
#包括
类sampClass
{
公众:
模板
其他类别马铃薯()
{
返回其他类(本);
}
sampClass(int a)
{
m_a=a;
}
void moo()
{
std::coutmoo();
}
};
int main()
{
sampClass a(5);
a、 马铃薯();
返回0;
}

只需添加转发声明即可:

#include <iostream>

//
// forward declare otherClass here
//
template <typename T>
class otherClass;

class sampClass
{
public:
    template <typename Z>
    otherClass<Z> potato()
    {
        return otherClass<Z>(this);

    }
    sampClass(int a)
    {
        m_a = a;
    }
    void moo()
    {
        std::cout << "MOO!";
    }
    int m_a;
};

template <typename T>
class otherClass
{
public:
    otherClass(sampClass* doMoo)
    {
        doMoo->moo();
    }
};
#包括
//
//在此转发声明其他类
//
模板
另一类;
类sampClass
{
公众:
模板
其他类别马铃薯()
{
返回其他类(本);
}
sampClass(int a)
{
m_a=a;
}
void moo()
{
std::coutmoo();
}
};

以上
otherClass
添加
class otherClass且不包含标题。谢谢-模板类与常规类一样适用。你不必概述这个方法。