是否可以实现此代码?
class apple;
class fruit{
public: int i;
void set(apple a){
}
};
class apple{
public: int j;
void set(fruit f){
}
};
我知道这会导致错误:' a'有不完整的类型。即使我交换类,它总是导致不完整的类型错误。我有一个问题可以实现吗?我不确定。任何帮助都很有用。感谢
更新
class apple;
class fruit{
public: int i;
void set(apple* a);
};
class apple{
public: int j;
void set(fruit f){
}
};
void fruit::set(apple *a){
apple b = *a;
}
我猜这个解决方法有效。但还有其他解决方案吗?
答案 0 :(得分:3)
这是可能的,但你需要在类之外有方法定义:
class apple;
class fruit {
public:
int i;
void set(apple a);
};
class apple {
public:
int j;
void set(fruit f);
};
void fruit::set(apple a)
{
i = a.j;
}
void apple::set(fruit f)
{
j = f.i;
}
答案 1 :(得分:1)
使用指针或引用,因为在这种情况下只需要知道名称:
class apple;
class fruit{
public:
int i;
void set(apple* a); // OK
void set(apple& a); // Also OK
};
您需要将函数的实现移动到已知apple
定义的位置。
答案 2 :(得分:0)
你不能有像这样的循环引用。唯一的可能性是使用指向对象而不是对象的指针,如:
class apple;
class fruit{
public: int i;
void set(apple * a){
}
};
class apple{
public: int j;
void set(fruit * f){
}
};
并使用函数内的去引用对象进行管理,即在这些函数apple::set
和fruit::set
的实现中使用* f
如果您希望在作为指针传递时使对象不可修改,请使用:
class apple;
class fruit{
public: int i;
void set(const apple * a){
}
};
class apple{
public: int j;
void set(const fruit * f){
}
};