0

私は長い間最初のコンパイルを解決しようとしていますが、これが最後のハードルだと思います。

デザインでこのタイプの階層を作成しようとしています。

  class chin_
  {
  private:
    charon_* engine;

  public:
    chin_();
    chin_(charon_ &handle)
    {
      engine = handle;
    }
    ~chin_();
  };

//////////////

  class charon_ {
  private:
    chin_ engine_input;

  public:
    charon_(){
      engine_input = chin_(this);
    }
    ~charon_();
  };

呼び出しに一致する関数がないことを示すエラーが発生します

'chio::chin_::chin()'

また、これはコンストラクターをcharon_&に変更した場合のみであることに注意してください。

public:
        chin_(const charon_ &handle)
        {
          engine = handle;
        }
sys/../headers/chio.h:104:5: note:   no known conversion for argument 1 from ‘charon::charon_* const’ to ‘const charon::charon_&’

&の代わりに*を使用すると、代わりにこれを取得します。これははるかに厄介です。

sys/../headers/chio.h:104:5: note: chio::chin_::chin_(const charon::charon_*)
sys/../headers/chio.h:104:5: note:   candidate expects 1 argument, 0 provided

私はこれとあれを試しました、そしてそれはおそらく超単純なものだと思います。私は自分のコードを見つけた例と正直に一致させようとしましたが、他に何を試すべきかわかりません。この種のものを自分で理解できるようにしたいと思います。運が悪いだけです。

編集:コードを更新しましたが、更新されたエラーを下部に残しました。

sys/chin.cpp:19:14: error: cannot convert ‘charon::charon_’ to ‘charon::charon_*’ in assignment

このコードに私を連れて行く

  chin_::chin_(charon_ &handle) {
    engine = handle;
  }

engineはcharon_*エンジンとして定義されています。ハンドルは住所のようで、正しい位置に収まるはずですが、そうではありません。私はこれを正しく使用していないと思います。

4

1 に答える 1

1

When you declare something like this :

  chin_ engine_input;

chin_ needs a constructor with no parameters or you have to pass the parameters to it in the initializer list, otherwise you will get the error about no matching constructor.

What you can do is either have a default constructor that takes no params. Or make engine_input a pointer and create it with :

 engine_input = new chin_(handle);

Alternatively you can pass handle to chin_ in the initializer list like this :

 foo::foo(charon* handle):
 chin_(handle)
{

}
于 2012-04-15T16:41:19.643 に答える