2012-04-15 49 views
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; 
    } 

引擎定义为 charon_ *引擎;并处理似乎是一个地址,应该落在原地,但事实并非如此。我想我没有正确使用它。

回答

1

当你声明是这样的:

chin_ engine_input; 

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

你可以做的是要么有一个默认的构造函数,不带任何参数。或使engine_input指针,并创建它:

engine_input = new chin_(handle); 

另外,您可以通过手柄在初始化列表中像这样chin_:

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

} 
+0

我这样做,取得了空的构造,它摆脱了“sys/chin.cpp:19:14:错误:无法在作业中将'charon :: charon_'转换为'charon :: charon_ *' – 2012-04-15 17:00:51

+0

一个变量指向一个指针,你必须使用&的地址。像这样: pointerToEngine =&engine; – 2012-04-15 17:01:47

+0

如果您尝试分配一个错误,但现在还剩一个错误 – 2012-04-15 17:03:25