Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Help on Multiple Friend Class Include Problems

Reply
Thread Tools

Help on Multiple Friend Class Include Problems

 
 
windmill2008@gmail.com
Guest
Posts: n/a
 
      03-23-2007
I am trying to write two classes which can access the same base class
as shown in the following code. My problem is when I include these two
classes in the main.cpp, errors pop up saying that the base class is
redefined. Is there anyone who can tell me how to do with it? ( I
still want to have two friend classes of the same baseclass)
thanks
************************************************** *********************************************
baseclass.h:
---------------------------------------
class baseClass
{

private:

static int arrays[2][2];

public:
friend class newClass1;
friend class newClass2;

};
----------------------------------------
newclass1.h:
-----------------------------------------
#include baseclass.h
class newClass1
{
public:
access(baseClass *);
};

--------------------------------------
newclass2.h:
--------------------------------------
#include baseclass.h
class newClass2
{
public:
calcuate(baseClass *);
};
-----------------------------------------------

#include "newclass1.h"
#include "newclass2.h"

Main.cpp:
{
newclass1 mynewclass1;
newclass2 mynewclass2;
......
}

 
Reply With Quote
 
 
 
 
red floyd
Guest
Posts: n/a
 
      03-23-2007
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> I am trying to write two classes which can access the same base class
> as shown in the following code. My problem is when I include these two
> classes in the main.cpp, errors pop up saying that the base class is
> redefined. Is there anyone who can tell me how to do with it? ( I
> still want to have two friend classes of the same baseclass)
> thanks
> ************************************************** *********************************************
> baseclass.h:
> ---------------------------------------
> class baseClass
> {
>
> private:
>
> static int arrays[2][2];
>
> public:
> friend class newClass1;
> friend class newClass2;
>
> };
> ----------------------------------------
> newclass1.h:
> -----------------------------------------
> #include baseclass.h
> class newClass1
> {
> public:
> access(baseClass *);
> };
>
> --------------------------------------
> newclass2.h:
> --------------------------------------
> #include baseclass.h
> class newClass2
> {
> public:
> calcuate(baseClass *);
> };
> -----------------------------------------------
>
> #include "newclass1.h"
> #include "newclass2.h"
>
> Main.cpp:
> {
> newclass1 mynewclass1;
> newclass2 mynewclass2;
> .....
> }
>


You are including baseclass.h twice (note, in your h files, you need the
quotes around baseclass.h). Google for "include guard".

// baseclass.h
#ifndef BASECLASS_H_
#define BASECLASS_H_

class baseClass { ... };

#endif
 
Reply With Quote
 
 
 
 
David Harmon
Guest
Posts: n/a
 
      03-23-2007
On 23 Mar 2007 11:02:47 -0700 in comp.lang.c++, (E-Mail Removed)
wrote,
>I am trying to write two classes which can access the same base class
>as shown in the following code. My problem is when I include these two
>classes in the main.cpp, errors pop up saying that the base class is
>redefined.


Most headers should be written in such a way that they can be included
repeatedly without causing that problem. The usual solution is
preprocessor "include guards" along the lines of:

>baseclass.h:
>---------------------------------------


#ifndef BASECLASS_H
#define BASECLASS_H

>class baseClass
>{
>
>private:
>
> static int arrays[2][2];
>
>public:
> friend class newClass1;
> friend class newClass2;
>
>};


#endif

 
Reply With Quote
 
windmill2008@gmail.com
Guest
Posts: n/a
 
      03-23-2007
Thanks a lot.

 
Reply With Quote
 
Michael
Guest
Posts: n/a
 
      03-23-2007
> ----------------------------------------
> newclass1.h:
> -----------------------------------------
> #include baseclass.h
> class newClass1
> {
> public:
> access(baseClass *);
>
> };


In addition to the include guard advice, you don't need in #include
baseclass.h in your .h files (in this case). Instead, you could
simply forward declare baseClass:

class baseClass; // Forward declaration only.
class newClass1
{
public:
access(baseClass *);

};

This may or may not matter for your current project, but it's a good
habit to get into - don't include any files you don't absolutely have
to, because for larger projects unnecessary includes add significant
recompilation time whenever you make a change to the included files.

Michael

 
Reply With Quote
 
windmill
Guest
Posts: n/a
 
      03-23-2007
thanks a lot

James

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
/* #include <someyhing.h> */ => include it or do not include it?That is the question .... Andreas Bogenberger C Programming 3 02-22-2008 10:53 AM



Advertisments