Reputation: 23
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
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
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
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
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