1

クラスで少し問題があります。どちらもテンプレート メソッドを使用する 2 つのクラスがあるため、ヘッダーに配置する必要があります。ここに例があります。「前方宣言未完」の問題なく、きちんとコンパイルしてほしいです。何が悪いのかは理解していますが、これを修正する方法がわかりません。君たちありがとう。

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

1 に答える 1

3

循環依存があります。不完全なクラスのオブジェクトは宣言できません。これは、不完全なクラスへのポインターまたは参照を宣言することで解決できます。

class A
{
    B* foo;

また

class A
{
    B& foo;

後者の場合、コンストラクターのメンバー初期化リストで参照を初期化する必要があります。


ポインタを使用している場合は、メンバー関数の定義を不完全なクラスの定義の後に移動する必要があります。

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 に答える