Hello, I was wondering if it is possible to forward declare a type
definition. If so, what is the way to do it? I found a couple of
messages where they say it's not possible but there must be a way to
do it.
Thank you.
aČ 5 6954
On Mon, 19 Nov 2007 18:43:58 -0800 (PST) in comp.lang.c++, aaragon
<al**************@gmail.comwrote,
>Hello, I was wondering if it is possible to forward declare a type definition. If so, what is the way to do it?
Sure, for example,
class foobar;
Of course the type is "incomplete" without the full definition and there
are limits to what you can do with it; you can create pointers to it but
not instances of it.
aaragon wrote:
Hello, I was wondering if it is possible to forward declare a type
definition.
You can forward declare classes.
You cannot, however, forward declare an identifier as a type name to be
defined (e.g., by typedef) later.
If so, what is the way to do it? I found a couple of
messages where they say it's not possible but there must be a way to
do it.
Why?
If you are in a situation where you write code for a type (not necessarily
just a class) yet unknown, consider writing a template.
Best
Kai-Uwe Bux
On Nov 19, 10:16 pm, Kai-Uwe Bux <jkherci...@gmx.netwrote:
aaragon wrote:
Hello, I was wondering if it is possible to forward declare a type
definition.
You can forward declare classes.
You cannot, however, forward declare an identifier as a type name to be
defined (e.g., by typedef) later.
If so, what is the way to do it? I found a couple of
messages where they say it's not possible but there must be a way to
do it.
Why?
If you are in a situation where you write code for a type (not necessarily
just a class) yet unknown, consider writing a template.
Best
Kai-Uwe Bux
I'm using code from a library so I need to create type definitions for
specific types. However, the type definition is defined by using a
templated class that uses it at the same time. Something like this:
typedef Class<MyOwnClass1, MyOwnClass2ClassA;
// Then, in the definition of MyOwnClass
template <class SomeClass>
class MyOwnClass {
// uses type definition ClassA
someFun(ClassA&);
};
// and then the actual instantiations of MyOwnClass
typedef MyOwnClass<SomeClass1MyOwnClass1;
typedef MyOwnClass<SomeClass2MyOwnClass2;
so you can see, that the class MyOwnClass depends on types that are
not yet instantiated.
The way I solved this is by moving the typedefinition of MyOwnClass1
and MyOwnClass2 before the first typedef and using a forward
declaration of the template class MyOwnClass. Very messy eh???? It
turns out that this cyclic dependence is because of the use of a
Visitor class that I need to have for MyOwnClass (visitor design
pattern).
aČ
aaragon wrote:
On Nov 19, 10:16 pm, Kai-Uwe Bux <jkherci...@gmx.netwrote:
>aaragon wrote:
>>Hello, I was wondering if it is possible to forward declare a type definition.
You can forward declare classes.
You cannot, however, forward declare an identifier as a type name to be defined (e.g., by typedef) later.
>>If so, what is the way to do it? I found a couple of messages where they say it's not possible but there must be a way to do it.
Why?
If you are in a situation where you write code for a type (not necessarily just a class) yet unknown, consider writing a template.
Best
Kai-Uwe Bux
I'm using code from a library so I need to create type definitions for
specific types. However, the type definition is defined by using a
templated class that uses it at the same time. Something like this:
typedef Class<MyOwnClass1, MyOwnClass2ClassA;
// Then, in the definition of MyOwnClass
template <class SomeClass>
class MyOwnClass {
// uses type definition ClassA
someFun(ClassA&);
What's wrong with just declaring 'ClassA' a class instead of making
it a typedef? To declare a function that accepts a reference to it
the compiler only needs to know that it's a class (and not an array
or a function, for example).
>
};
// and then the actual instantiations of MyOwnClass
typedef MyOwnClass<SomeClass1MyOwnClass1;
typedef MyOwnClass<SomeClass2MyOwnClass2;
so you can see, that the class MyOwnClass depends on types that are
not yet instantiated.
The way I solved this is by moving the typedefinition of MyOwnClass1
and MyOwnClass2 before the first typedef and using a forward
declaration of the template class MyOwnClass. Very messy eh???? It
turns out that this cyclic dependence is because of the use of a
Visitor class that I need to have for MyOwnClass (visitor design
pattern).
aČ
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
On Nov 20, 11:11 am, "Victor Bazarov" <v.Abaza...@comAcast.netwrote:
aaragon wrote:
On Nov 19, 10:16 pm, Kai-Uwe Bux <jkherci...@gmx.netwrote:
aaragon wrote: Hello, I was wondering if it is possible to forward declare a type definition.
You can forward declare classes.
You cannot, however, forward declare an identifier as a type name to
be defined (e.g., by typedef) later.
>If so, what is the way to do it? I found a couple of messages where they say it's not possible but there must be a way to do it.
Why?
If you are in a situation where you write code for a type (not
necessarily just a class) yet unknown, consider writing a template.
Best
Kai-Uwe Bux
I'm using code from a library so I need to create type definitions for
specific types. However, the type definition is defined by using a
templated class that uses it at the same time. Something like this:
typedef Class<MyOwnClass1, MyOwnClass2ClassA;
// Then, in the definition of MyOwnClass
template <class SomeClass>
class MyOwnClass {
// uses type definition ClassA
someFun(ClassA&);
What's wrong with just declaring 'ClassA' a class instead of making
it a typedef? To declare a function that accepts a reference to it
the compiler only needs to know that it's a class (and not an array
or a function, for example).
};
// and then the actual instantiations of MyOwnClass
typedef MyOwnClass<SomeClass1MyOwnClass1;
typedef MyOwnClass<SomeClass2MyOwnClass2;
so you can see, that the class MyOwnClass depends on types that are
not yet instantiated.
The way I solved this is by moving the typedefinition of MyOwnClass1
and MyOwnClass2 before the first typedef and using a forward
declaration of the template class MyOwnClass. Very messy eh???? It
turns out that this cyclic dependence is because of the use of a
Visitor class that I need to have for MyOwnClass (visitor design
pattern).
aČ
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
ClassA is defined by a library. It is actually a class template, so
the correct type has to be obtained through a type definition. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Alexander Grigoriev |
last post by:
Not quite new version of GCC that I have to use, craps with the following
code:
enum E;
enum E { e };
That is, it doesn't accept forward declaration of enum. C++ standard text
doesn't...
|
by: John Gabriele |
last post by:
I'm hoping someone can please help me remember the C++ rule: When
you're writing a header file for a class (say, some_namespace::Bar),
and that class makes use of another class...
|
by: John Ratliff |
last post by:
I'm having issues with forward declarations and possibly member variables.
Can you declare a member variable and pass it parameters.
class x {
private:
y obj(this);
}
Is that valid? I'm...
|
by: Michael Sgier |
last post by:
Hello
with the original code below I get the error:
"forward declaration of `struct CPlayer'"
class CPlayer; // what does this do? Instantiate the class CPlayer?
// what's a forward...
|
by: Milind |
last post by:
Hi,
I was trying to implement a composition relation, somthing of the
following type:
class A
{
public:
class B
{
|
by: mark.moore |
last post by:
I know this has been asked before, but I just can't find the answer in
the sea of hits...
How do you forward declare a class that is *not* paramaterized, but is
based on a template class?
...
|
by: Steve |
last post by:
Hi,
I always though to return an instance of a class by value, it had to be
defined - i.e. forward declaration isn't good enough?
Consider the following code snippet:
class RGBA;
class...
|
by: RedLars |
last post by:
Need some help with a couple of questions. Previously I have seen this
declaration;
struct Student
{
int age;
char name;
};
and this definition of an object;
struct Student stud;
|
by: Jef Driesen |
last post by:
I have the following problem in a C project (but that also needs to
compile with a C++ compiler). I'm using a virtual function table, that
looks like this in the header file:
typedef struct...
|
by: taylorcarr |
last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
by: aa123db |
last post by:
Variable and constants
Use var or let for variables and const fror constants.
Var foo ='bar';
Let foo ='bar';const baz ='bar';
Functions
function $name$ ($parameters$) {
}
...
|
by: BarryA |
last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Hystou |
last post by:
There are some requirements for setting up RAID:
1. The motherboard and BIOS support RAID configuration.
2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
|
by: Hystou |
last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
| |