我目前有两个课程:foo和bar。 Foo在其中一个方法中使用bar实例,bar在其构造函数中使用foo实例。但是,这不会编译。我知道存在循环依赖,所以我试图通过在foo的头文件中声明foo方法之前在foo中声明bar来突破这一点。这失败了,因为我实际上不能在源文件中的foo方法中使用bar或其任何组件。然后我尝试重新安排它,以便已经定义了所需的源文件中的所有内容,然后我输入了bar的所有定义,然后我在foo中定义了使用bar的方法。因为同样的原因失败了。以下是我的代码的简化版本:
// Header.h
class foo{
class bar;
void method(bar& b);
};
class bar{
bar(foo& f, double d);
};
// Source.cpp
#include Header.h
// stuff defining foo that I need for bar in the form foo::foo(...){...}
// stuff defining bar that I need for foo::method
void foo::method(bar& b){
// do stuff with foo and b
}
我想指出,当我在foo :: method的定义中删除对bar实例的引用时,代码会编译并正常运行。
我的具体示例将foo类作为同构坐标中的向量,将bar类作为四元数。四元数类在其构造函数中使用向量和旋转角度,向量类在其旋转方法中使用四元数。
有没有办法在不删除依赖项的情况下对此进行编码,还是应该删除其中一个依赖项?
答案 0 :(得分:1)
尝试在bar
之外声明foo
:
class bar;
class foo{
method(bar& b);
}
class bar{
bar(foo& f, double d);
}
正如你在那里所做的那样,你正在宣布一个名为foo::bar
的课程。