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

时间:2012-04-15 16:35:11

标签: c++ compiler-errors

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

我正在尝试在我的设计中创建这种类型的层次结构。

  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;
  }

引擎定义为 charon_ *引擎;和句柄似乎是一个地址,应该正确到位,但事实并非如此。我想我没有正确使用它。

1 个答案:

答案 0 :(得分:1)

当你宣布这样的事情时:

  chin_ engine_input;

chin_需要一个没有参数的构造函数,或者你必须在初始化列表中将参数传递给它,否则你将得到关于没有匹配的构造函数的错误。

你可以做的是拥有一个不带参数的默认构造函数。或者使engine_input成为指针并使用:

创建它
 engine_input = new chin_(handle);

或者你可以在初始化列表中将句柄传递给chin_,如下所示:

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

}