martins
martins

Reputation: 23

2 classes trying to access each others methods, can't solve dependancies

I am learning c++ and writing a game. it was going more or less okey. but the bigger it gets the more trouble i get from dependencies. How can i fix this kind of dependency?

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;
    }

Upvotes: 0

Views: 111

Answers (4)

Hossein
Hossein

Reputation: 4137

Move the function bodies outside the class bodies.

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;
}

In professional object-oriented programming class function declarations and definitions are often kept in separate *.h and *.cpp files. Then the *.h file is included in the main file.

Upvotes: 1

Erik
Erik

Reputation: 91300

You need to define your classes in header files, and define member functions in cpp files.

//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();
}

Then do the same for myClass_2. You don't need myClass_2's member function definition in order to call the member functions, you only need the class definition found in class2.h

Upvotes: 1

dfan
dfan

Reputation: 5824

I wish you had said what trouble you were getting exactly.

If the trouble is that it can't compile myClass_1::doSomething1() because it doesn't know how to call myclass2->doSomething2(), the solution is to move the definition of myClass_1::doSomething1() below the definition of 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();
}

Upvotes: 0

Naveen
Naveen

Reputation: 73473

You need to separate the class definition in a header file (with .h extension) and a source file (.cpp or .cc file). And then use #include to include the header file to solve these types of problems. See this link for a more detailed explanation: Header files in C++

Upvotes: 2

Related Questions