簡體   English   中英

C ++模板方法前向聲明

[英]C++ template method forward declaration

我的班級有點問題。 我有兩個類都使用模板方法,因此我必須把它放在標題中。 這是一個例子。 我希望它能在沒有“前向聲明不完整”問題的情況下正確編譯。 我明白什么是錯的,但我無法弄清楚如何糾正這個問題。 感謝大伙們。

class.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>();
       }
    }

你有循環依賴。 您不能聲明不完整類的對象。 您可以通過聲明指針或對不完整類的引用來解決此問題。

class A
{
    B* foo;

要么

class A
{
    B& foo;

在后一種情況下,您必須使用構造函數的成員初始化列表初始化引用。


如果您正在使用指針,那么您應該在incomplte類的定義之后移動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();   
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM