Help on Multiple Friend Class Include Problems

W

windmill2008

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

red floyd

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
 
D

David Harmon

On 23 Mar 2007 11:02:47 -0700 in comp.lang.c++, (e-mail address 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
 
M

Michael

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

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,575
Members
45,053
Latest member
billing-software

Latest Threads

Top