C++ 在构造函数调用期间将其传递给对象中的对象

C++ 在构造函数调用期间将其传递给对象中的对象,c++,compiler-errors,C++,Compiler Errors,我正试图在很长一段时间内完成我的第一次编译,我认为这是最后一个障碍 我试图在我的设计中创建这种层次结构 class chin_ { private: charon_* engine; public: chin_(); chin_(charon_ &handle) { engine = handle; } ~chin_(); }; ////////////// class charon_ { pri

我正试图在很长一段时间内完成我的第一次编译,我认为这是最后一个障碍

我试图在我的设计中创建这种层次结构

  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;
  }
引擎定义为
卡隆发动机;手柄似乎是一个地址,应该放在正确的位置,但它不是。我认为我没有正确地使用它。

当您声明类似的内容时:

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

}
chin_uu需要一个没有参数的构造函数,或者您必须在初始值设定项列表中将参数传递给它,否则您将得到关于没有匹配构造函数的错误

您可以做的是要么使用不带参数的默认构造函数。或者让engine_输入一个指针并使用以下命令创建它:

 engine_input = new chin_(handle);
或者,您可以将句柄传递给初始值设定项列表中的chin_uu,如下所示:

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

}

我这样做了,创建了空构造函数,它消除了一些错误,但现在我只剩下一个“sys/chin.cpp:19:14:error:cannot convert'charon::charon_uu'到赋值中的'charon::charon_u*”,如果您试图将变量赋值给指针,则必须使用&。如下所示:pointerToEngine=&engine;我刚刚更新了代码以反映实际的切换。我将构造函数从(const charon_*handle)更改为just(charon_*handle),这似乎使事情最接近工作状态。最后,错误是针对一行实际的代码。一旦您完成了所有指针魔术,您可以查看std::shared_ptr和std::unique_ptr。