使用多个相互引用的类编译c ++代码

时间:2017-02-16 23:25:31

标签: c++ c++11 compiler-errors circular-dependency

我对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文件中拥有所有类时,我从未遇到任何其他问题。我刚才有一个问题,前向声明对于循环依赖是不够的。现在我陷入了编译的困境。我是否在编译命令中更改顺序?

0 个答案:

没有答案