0

タイトル不明。ここで私は説明しています

私はパッケージに言ってもらいますpackage provide test。持っていclassesます。を使用してItclいます。パッケージは次の構造を持っています

::itcl::class classA {
written something having constructor and methods
}

::itcl::class classB {
inherit ::test::classA
having its own constructor and methods
}

::itcl::class classC {
inherit ::test::classA
having its own constructor and methods
}

::itcl::class classD {
inehrit ::test::classB ::test::classC
having its own constructor and methods
}

私が必要としているときpackage test、私はエラーを下回っています

class "::test::classD" inherits base class "::test::classA" more than once:

エラーを処理するにはどうすればよいですか

4

1 に答える 1

1

パスが曖昧なため、ダイヤモンドの継承は許可されません。いえ

      TopClass
      /       \
LeftClass   RightClass
      \       /
     BottomClass

回避策として、継承 (is-a) ではなく合成 (has-a) を使用できます。

::itcl::class classA {
}

::itcl::class classB {
    inherit ::test::classA
}

::itcl::class classC {
    inherit ::test::classA
}

::itcl::class classD {
   constructor {} {
     set _b [::test::classB #auto]
     set _c [::test::classC #auto]
   }
   destructor {
     ::itcl::delete $_b
     ::itcl::delete $_c
   }
   private {
      variable _b ""
      variable _c ""
   }
}

classD では、コードがベースに到達する classB または classC パスに固有である必要があります。

于 2014-04-16T10:11:05.847 に答える