2个类试图访问彼此的方法,无法解析依赖关系

时间:2011-03-22 12:13:08

标签: c++ dependencies

我正在学习c ++并编写游戏。它或多或少变得越来越好。但它越大,从依赖关系中获得的麻烦越多。 我该如何解决这种依赖?

class myClass_2;

    class myClass_1 {
        private:
            myClass_2 * myclass2;
        public:
            myClass_1() {}
            void setUp(myClass_2 &myclass) {
                myclass2 = &myclass;
            }
            void doSomething_1(){
                myclass2->doSomething_2();
            }
    };

    class myClass_2 {
        private:
            myClass_1 * myclass1;
        public:
            myClass_2() {}
            void setUp(myClass_1 &myclass) {
                        myclass1 = &myclass;
                    }
            void doSomething_2() {
                myclass1->doSomething_1();
            }
    };

    int main () {
        myClass_1 class_1;
        myClass_2 class_2;
        class_1.setUp(class_2);
        class_2.setUp(class_1);
        return 1;
    }

4 个答案:

答案 0 :(得分:2)

您需要在头文件(带有.h扩展名)和源文件(.cpp.cc文件)中分隔类定义。然后使用#include包含头文件来解决这些类型的问题。有关更详细的说明,请参阅此链接:Header files in C++

答案 1 :(得分:1)

您需要在头文件中定义类,并在cpp文件中定义成员函数。

//class1.h
class myClass_2;
class myClass_1 {
    private:
        myClass_2 * myclass2;
    public:
        myClass_1();
        void setUp(myClass_2 &myclass);
        void doSomething_1();
};


//class1.cpp
#include "class1.h"
#include "class2.h"

myClass_1::myClass_1() {
}

void myClass_1::setUp(myClass_2 &myclass) {
    myclass2 = &myclass;
}

void myClass_1::doSomething_1() {
    myclass2->doSomething_2();
}

然后对myClass_2执行相同的操作。您不需要myClass_2的成员函数定义来调用成员函数,您只需要class2.h

中的 class 定义

答案 2 :(得分:1)

将函数体移动到类体之外。

class myClass_2;

class myClass_1 {
    private:
        myClass_2 * myclass2;
    public:
        myClass_1() {}
        void setUp(myClass_2 &myclass);
        void doSomething_1();
};

class myClass_2 {
    private:
        myClass_1 * myclass1;
    public:
        myClass_2() {}
        void setUp(myClass_1 &myclass);
        void doSomething_2();
};

void myClass_1::setUp(myClass_2 &myclass) {
    myclass2 = &myclass;
}
void myClass_1::doSomething_1(){
    myclass2->doSomething_2();
}

void myClass_2::setUp(myClass_1 &myclass) {
    myclass1 = &myclass;
}
void myClass_2::doSomething_2() {
    myclass1->doSomething_1();
}

int main () {
    myClass_1 class_1;
    myClass_2 class_2;
    class_1.setUp(class_2);
    class_2.setUp(class_1);
    return 1;
}

在专业的面向对象编程中,类函数声明和定义通常保存在单独的* .h和* .cpp文件中。然后* .h文件包含在主文件中。

答案 3 :(得分:0)

我希望你说过你遇到了什么麻烦。

如果问题是它无法编译myClass_1::doSomething1()因为它不知道如何调用myclass2->doSomething2(),那么解决办法就是将myClass_1::doSomething1()的定义移到定义之下myclass_2

class MyClass_1 {
   ...
   void doSomething_1();  // just declare it here
   ...
}

class My_Class_2 {
   ...
   void doSomething_2();
   ...
}

void MyClass_1::doSomething_1()      // now define it
{
   myclass2->doSomething_2();
}