ISO C++ forbids declaration of 'Rectangle' with no type

F

Florian Haag

Hello,
I'm trying to compile a programme which compiles fine under Linux; I'm
trying it with MinGW G++ 3.4.2:


Component.h:

#ifndef COMPONENT_H_
#define COMPONENT_H_

#include "../basics/Rectangle.h"

class Component {
private:
Rectangle *bounds;
// Unique identifier
long id;

// more declarations

};

#endif


Rectangle.h (relative path is as included above):

#ifndef RECTANGLE_H_
#define RECTANGLE_H_

#include "Point.h"

class Rectangle
{
// some declarations
};

#endif


Point.h (same directory as Rectangle.h)

#ifndef POINT_H_
#define POINT_H_

class Point {
// some declarations
};

#endif


Now, in Windows, I always get the following compilation errors (where
line 25 in Component.h matches the line "Rectangle *bounds;" shown
above):

In file included from visdgetsbase.h:13,
from main.cpp:14:
widgets/Component.h:25: error: ISO C++ forbids declaration of
`Rectangle' with n
o type
widgets/Component.h:25: error: expected `;' before '*' token
widgets/Component.h:41: error: ISO C++ forbids declaration of
`Rectangle' with n
o type
widgets/Component.h:41: error: expected `;' before '*' token
widgets/Component.h:43: error: variable or field `setBounds' declared
void
widgets/Component.h:43: error: expected `;' before '(' token

So, why isn't Rectangle recognized as a type?

I tried removing the relative path in #include, but that only results
in an additional error message saying that the file Rectangle.h wasn't
found at all. I also made sure I don't have any other file called
Rectangle.h on my entire hard disk, so quite obviously, with the
relative paths given in the #include directive, the correct file
should've been found, then why isn't the type Rectangle?

Thanks in advance,
Florian
 
?

=?iso-8859-1?q?Erik_Wikstr=F6m?=

Hello,
I'm trying to compile a programme which compiles fine under Linux; I'm
trying it with MinGW G++ 3.4.2:

Component.h:

#ifndef COMPONENT_H_
#define COMPONENT_H_

#include "../basics/Rectangle.h"

class Component {
private:
Rectangle *bounds;
// Unique identifier
long id;

// more declarations

};
#endif

In file included from visdgetsbase.h:13,
from main.cpp:14:
widgets/Component.h:25: error: ISO C++ forbids declaration of
`Rectangle' with no type

Seems to me like the problem might be on line 25 in Component.h (or a
bit above), but the part from Component.h you pasted does not contain
the 25th line so I can't help you. Make sure that the last statement
above line 25 has a ; at the end.
 
F

Florian Haag

Erik said:
Seems to me like the problem might be on line 25 in Component.h (or a
bit above), but the part from Component.h you pasted does not contain
the 25th line so I can't help you. Make sure that the last statement
above line 25 has a ; at the end.

Hi,
sorry if I explained this in a confusing way, actually, the line

Rectangle *bounds;

_is_ line 25, already shown in my code in the original posting (I
removed some comments when copying the code here).

Regards, thanks in advance,
Florian
 
F

Florian Haag

Kai-Uwe Bux said:
Well, in removing that code, you probably removed the error. Post
those lines. (This is covered in the FAQ:

www.parashift.com/c++-faq-lite/how-to-post.html#faq-5.8

Sorry, this sent me to the right direction; there was a naming conflict
with a Rectangle-function from wingdi.h, which of course only occurred
in Windows.
I'm sorry for not having followed those rules, I still am not used that
in C++, there can be such an influence accross several files, unlike in
some other languages.

Regards,
Florian
 
B

Bo Persson

Florian said:
Sorry, this sent me to the right direction; there was a naming
conflict with a Rectangle-function from wingdi.h, which of course
only occurred in Windows.
I'm sorry for not having followed those rules, I still am not used
that in C++, there can be such an influence accross several files,
unlike in some other languages.

So C++ provides namespaces to isolate different components into their own
space.


Bo Persson
 
N

Noah Roberts

with a Rectangle-function from wingdi.h, which of course only occurred
in Windows.
I'm sorry for not having followed those rules, I still am not used that
in C++, there can be such an influence accross several files, unlike in
some other languages.

Other languages usually solve this "problem" with namespaces. It is
rare that a language allows the same symbol to be used to mean
different things.
 
F

Florian Haag

Noah said:
Other languages usually solve this "problem" with namespaces. It is
rare that a language allows the same symbol to be used to mean
different things.

Right, well - e.g. in Delphi, if you include another source file A, by
default, you just include the declarations from that very source file
A, not those of other source files B and C referenced by A.

Regards,
Florian
 

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,995
Messages
2,570,230
Members
46,818
Latest member
Brigette36

Latest Threads

Top