# Forward declaration

## Recommended Posts

I have been working on a geometric library, and I have uploaded a stripped down version of the library that is causing a problem for me regarding the use of forward declarations, I think. To compile I have been doing "g++ main.cpp" To download the code... http://codestash.googlepages.com/ezGeom.zip Basically in the point class I have placed a forward declaration to the vector class.
template < typename tType >
class clVector_3d; // Forward declaration

clVector_3d < tType > vector_1;


When I attempt to instantiate an object for the vector class the compiler complains about the isNull() function that is a template specialized implementation for data type long. If I comment out that specific isNull() function, it compiles perfectly. I don't understand why this is happening or what this has to do with the forward declaration. Some advice please.

##### Share on other sites
An example of forward declaration is this:

somefile.h
class anotherClass;class someclass{  private:   anotherClass* paC;};

You can only instantiate pointers to types from a forward declaration. To instantiate an object of the type you need to include the types header.

Hope that helps,

Dave

##### Share on other sites
Yeah I read the following article on wikipedia...

http://en.wikipedia.org/wiki/Circular_dependency

But what I don't understand is why everything compiles perfectly when I comment out the "isNull()" function in my point class. The one that is template specialized for datatype LONG. You said that to instantiate an object of the type you need to include the types header. I have not done that in the file containing the point class, and the compiler does not complain.

##### Share on other sites
Post the rest of the relevant source code.

##### Share on other sites

I'm using gcc so to compile this I just do a "g++ main.cpp" at the command prompt.

And when you compile the code you will get errors, but if you simply comment out the template specialized function called isNull() inside the point class it compiles with no problems.

But the rules apparently for forward declarations is that you can only instantiate pointers to types from a forward declaration. To instantiate an object of the type you need to include the types header.

I have neither included the types header in the point class nor have I instantiated pointers. And yet the only thing the compiler does not like is the template specialized function isNull() for datatype long. Now I have no problem getting rid of this template specialized function, but I would like to know the reason for these errors.

## Create an account

Register a new account

• ## Partner Spotlight

• ### Forum Statistics

• Total Topics
627681
• Total Posts
2978611

• 13
• 12
• 10
• 12
• 22