Suppose I want something of this sort, in one .cpp source file:
class A {
public:
void doSomething(B *b) {};
};
class B {
public:
void doSomething(A *a) {};
};
Is there anyway of doing this without splitting it into two separate files, and without receiving a compiler error (syntax error on doSomething(B *b))
Thanks, all 5 of you. Who exactly am I supposed to mark as accepted? :)
-
put at the first line:
class B;Yuval A : You were first, thanks! :) -
forward declare one class before other with
class B; or class A;But still you won't be able to implement
void doSomething(B *b)using only forward declaration of B. So you have to put definition of doSomething below full class A declaration
-
If I remember well, you can 'pre-declare' your class B.
class B; // predeclaration of class B class A { public: void doSomething(B* b); } class B { public void doSomething(A* a) {} } public void A::doSomething(B* b) {}Then, your class 'A' knows that a class 'B' will exists, although it hasn't been really defined yet.
Evan Teran : good answer, so you get the +1. But for reference the term is "forward declaration" -
Yes. You need a forward declaration:
class B; // add this line before A's declaration class A { public: void doSomething(B *b) {}; }; class B { public: void doSomething(A *a) {}; }; -
You can try a forward declaration like
class B; class A { void Method( B* ); }; class B{ };but you will only be able to declare pointer and reference variables for B then. If you want more (like a method that dereferences B* variable) you can provide a declaration only and define methods later in the same file - at the point where both classes declaration is already available.
-
You need to forward declare B.
class B; class A { public: void doSomething(B *b) {} }; class B { public: void doSomething(A *a) {} };(And BTW, you don't need the semi-colons after the member function curly braces. :) )
-
The C++ FAQ Lite answers this question and others. I'd seriously considering reading that thing end to end, or getting the book and doing the same.
ssg : +1 for saying something different than the bunch -
Add another declaration of B before A:
class B; class A { public: void doSomething(B *b) {}; }; class B { public: void doSomething(A *a) {}; };
0 comments:
Post a Comment