我对c ++很新,我遇到循环依赖问题。我有这些相互调用的类,现在我不知道如何正确编译这段代码。
Main.cpp的
#include "ClassB.hpp" //Rate
#include "ClassC.hpp" //Molecule
#include "ClassA.hpp" //Matrix
using namespace std;
int main(int argc, char **argv) {
ClassC CaH (some_var);
return 1;
}
ClassA.hpp
using namespace std;
template< class T > class ClassA : public vector< vector< T > > {
//variables
Public:
//variables and functions
};
ClassA.cpp
#include "ClassA.hpp"
using namespace std;
ClassA::ClassA() : vector< vector< T > >() { }
ClassA::some_function ()
//more functions
ClassB.hpp
#include "ClassA.hpp"
#include "ClassC.hpp"
using namespace std;
class ClassB {
friend class ClassC;
private:
//variables
ClassC var1;
ClassA<long double> var2;
public:
//variables
ClassB (ClassC&);
};
ClassB.cpp
#include "ClassA.hpp"
#include "ClassB.hpp"
#include "ClassC.hpp"
using namespace std;
ClassB::ClassB(ClassC& m) {
var1 = *m;
}
ClassB::some_functions //these functions call ClassC variables
ClassC.hpp
using namespace std;
class ClassC {
friend class ClassB;
private:
//some variables
run_stuff();
public:
//some variables
ClassC ();
ClassC(some_var);
};
ClassC.cpp
#include "ClassB.hpp"
#include "ClassC.hpp"
using namespace std;
Molecule::Molecule() { }
Molecule::Molecule(some_var) {
//do stuff
}
run_stuff() {
for loop:
ClassB r (this);
// do stuff
}
这是我现在用来编译的命令。它会在页面上显示错误。 &#34;错误:先前定义'class&#34;,&#34;错误:重新定义'class&#34; &#34;错误:没有匹配函数来调用&#34; &#34;参数1从'ClassC *'到'ClassC&amp;'&#34;没有已知的转换; &#34;'变量'未在此范围内声明&#34; &#34;错误:在非成员函数中无效使用'this'&#34; &#34;'模板类ClassA'在没有模板参数的情况下使用&#34;
编译命令
g++ -std=c++11 lib1.cpp ClassA.cpp ClassC.cpp -lib2 ClassB.cpp Main.cpp -o main
当我在同一个main.cpp文件中拥有所有类时,我从未遇到任何其他问题。我刚才有一个问题,前向声明对于循环依赖是不够的。现在我陷入了编译的困境。我是否在编译命令中更改顺序?