2016-04-26 62 views
0

我基本上有一个循环依赖问题,其中一个函数使用一个对象对象并且该对象使用所述函数。有没有办法解决这个问题,而不解决它?函数使用对象和对象使用函数

//function that uses struct 
void change_weight(Potato* potato,float byX) { potato->weight+=byX; } 
//said struct that uses said function 
struct Potato 
{ 
    float weight=0.0; 
    Potato(float weightin) { change_weight(weightin); } 
}; 

注意,我理解这个例子是愚蠢的,但这个例子只包含其中已经出现在更复杂的情况下“问题的本质”,我有时会不知道我会如何解决,或即使它可以解决,而且能够做到这一点非常方便。我问是否有办法做到这一点没有解决它。

+2

你只需要拆分你的声明和实现,在通常的.h和.cpp文件之间。 – Quentin

+0

尽管代码仅仅是一个例子,但它是一个非常糟糕的例子...... :)该函数更适合作为成员函数。 –

+0

@JoachimPileborg在答案中:“请注意,我明白这个例子很愚蠢,但这个例子只包含”问题的本质“,它出现在更复杂的情况下,我有时候不知道如何解决它或者即使可以解决该问题“ –

回答

3

只有声明在结构定义构造函数,然后将定义出来的结构,并把它与功能一起,下面结构定义:

struct Potato 
{ 
    float weight=0.0; 
    Potato(float weightin); // Only declare constructor 
} 

//function that uses struct 
void change_weight(Potato potato,float byX) { potato.weight+=byX; } 

// Define the constructor 
Potato::Potato(float weightin) { change_weight(*this, weightin); } 
+2

回答了问题,但请注意代码无法编译:对'change_weight'的调用缺少参数。而且,“土豆”是有价值的。 – Quentin

+0

@Quentin我编辑在最后添加一个分号,并通过值更改传递通过参考在我的问题和这个答案(我在Ideone [这里](http://ideone.com/rdCMO5上测试它) )) –