我试图在很长一段时间内完成我的第一次编译,我认为这是最后一道障碍。
我正在尝试在我的设计中创建这种类型的层次结构。
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_ *引擎;和句柄似乎是一个地址,应该正确到位,但事实并非如此。我想我没有正确使用它。
答案 0 :(得分:1)
当你宣布这样的事情时:
chin_ engine_input;
chin_需要一个没有参数的构造函数,或者你必须在初始化列表中将参数传递给它,否则你将得到关于没有匹配的构造函数的错误。
你可以做的是拥有一个不带参数的默认构造函数。或者使engine_input成为指针并使用:
创建它 engine_input = new chin_(handle);
或者你可以在初始化列表中将句柄传递给chin_,如下所示:
foo::foo(charon* handle):
chin_(handle)
{
}