[C++] class gebruiken in eigen header file

Pagina: 1
Acties:

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Topicstarter
Ik wil voor een class deze header file definieren:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Taak
{
      private:
            char beschrijving[80];
            int invoegnummer;
            Taak next; // mm?
            void setNext(Taak& myTaak);
      public:
            Taak getNext();
            int getInvoegNummer();
            char getBeschrijving();
            Taak(char beschrijving[80],int invoegnummer, Taak vorige);
            Taak::~Taak();
};

Ik definieer dus de class Taak, en die wil ik ook in de eigen class gebruiken. Hier krijg ik een compile error over:
[C++ Error] Project2.cpp(15): E2450 Undefined structure 'Taak'.
Hoe zorg ik dat ik toch de class Taak kan gebruiken in zijn eigen definitie? (het moet een soort linkedList worden, en weet dat die er al zijn in C++ maar we moeten hem toch zelf schrijven ;) )

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:57
Voor uw class definitie zet je het volgende:
code:
1
class Taak;

Je bekomt dan iets als volgt:
code:
1
2
3
4
5
6
class Taak;

class Taak
{
  // hier komt uw class-definitie
};

Edit: ik denk trouwens niet dat je een object van hetzelfde type in uw class kunt zetten. Een pointer naar hetzelfde type kan wel.

https://fgheysels.github.io/


  • The End
  • Registratie: Maart 2000
  • Nu online

The End

!Beginning

Dit kan niet. (behalve als het een pointer naar die klasse is :) )
Je moet een klasse maken voor de linkedlist en een klasse voor de nodes...

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Topicstarter
Pointer schijnt idd wel gewoon te werken :P

Verwijderd

Als een class X een instance van diezelfde class X bevat, heb je in theorie een recursieve (oneindig grote) datastructuur. Immers, die X data member bevat ook weer een X, die ook weer een X bevat, etc etc etc. Dit kan dus logischerwijs niet.

Met references of pointers kan het inderdaad wel.

(In Java heb je dit 'probleem' niet omdat Java geen 'echte' data members heeft (op die primitives na dan), maar slechts references die je handmatig naar instances moet laten verwijzen.)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 11 maart 2002 11:50 schreef wasigh het volgende:
Pointer schijnt idd wel gewoon te werken :P
Je kunt botweg de klasse niet gebruiken voordat de definitie af is... oftewel na de puntkomma van je class-def :)

Beetje lullig... maar daar een pointer gewoon een adresje is is de declaratie daarvoor genoeg... en die is af bij de openings-accolade van de class.

ps. what the hell is mega-JavaHo met C++ aan het doen :Y)

Professionele website nodig?


Verwijderd

In C++ is het sinds de invoering van de STL niet meer de gewoonte je eigen object containers te schrijven. Ipv. handmatig een linked list op te zetten (met alle risico's van dangling pointers ed.) gebruik je dan een std::list.
code:
1
2
3
4
5
6
7
8
9
class Taak {
public:
  // Big 3, nodig voor STL containers.
  Taak();
  Taak(const Taak&);
  Taak& operator = (const Taak&);
};

typedef std::list<Taak> TaakLijst;

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Topicstarter
Op maandag 11 maart 2002 12:03 schreef curry684 het volgende:



ps. what the hell is mega-JavaHo met C++ aan het doen :Y)
* wasigh zit ook gewoon op school ;) en moet het allemaal nog leren ;)

  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

Op maandag 11 maart 2002 12:35 schreef wasigh het volgende:
* wasigh zit ook gewoon op school ;) en moet het allemaal nog leren ;)
leuk he, c++-en als je al java kunt :+

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Topicstarter
Op maandag 11 maart 2002 12:39 schreef limoentje het volgende:

[..]

leuk he, c++-en als je al java kunt :+
och ;)

c++ heeft alleen een domme compiler ;) en al die delete's die ik steeds vergeet :(

Nee, na 30 jaar mag c++ van mij de kast in ;)

  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

ben toevallig voor school nu ook bezig met C++ terwijl ik Java al flink onder de knie heb, moet zeggen: geef mij maar Java :+

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 11 maart 2002 12:43 schreef wasigh het volgende:
en al die delete's die ik steeds vergeet :(
Gebruik dan ook een smart-pointer constructie zodat je niet alleen nooit meer objecten hoeft te deleten net als in Java, maar zodat in tegenstelling tot Java ook de destructors WEL op het goede, betrouwbare moment worden aangeroepen!

Destructors zijn DE power van C++, en imho de grootste zwakte van Java en C#.

Professionele website nodig?


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Topicstarter
Op maandag 11 maart 2002 14:47 schreef curry684 het volgende:

[..]

Destructors zijn DE power van C++, en imho de grootste zwakte van Java en C#.
bekijk de methode finalize() in Object eens ;)

Verwijderd

Op maandag 11 maart 2002 14:47 schreef curry684 het volgende:
Destructors zijn DE power van C++, en imho de grootste zwakte van Java en C#.
Ik dacht dat multiple inheritance en generic programming de power van C++ waren :) (En nee, Java kan daar niet aan tippen; een interface is geen echte MI, en GP staat nog in zo in de kinderschoenen dat het niet gestandardiseerd is.)

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 11-09 18:38
Op maandag 11 maart 2002 15:15 schreef wasigh het volgende:

[..]

bekijk de methode finalize() in Object eens ;)
Bekijk eens wanneer die wordt aangeroepen ;(

Het voordeel van dtors is dat ze gebruikt kunnen worden om dingen meteen op te ruimen. ALs mijn Mutex pas na 15 minuten zou unlocken dan zou ik redelijk :r worden.

En nee, delete hoor je in echte C++ niet te gebruiken, behalve in een template - zoals auto_ptr of de echte smart pointers (van boost). Delete wordt voor je gedaan. C++, @ your service ( g,d&r :) )

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 04-09 14:38

curry684

left part of the evil twins

Op maandag 11 maart 2002 15:40 schreef MSalters het volgende:
Het voordeel van dtors is dat ze gebruikt kunnen worden om dingen meteen op te ruimen. ALs mijn Mutex pas na 15 minuten zou unlocken dan zou ik redelijk :r worden.
Idd daarvoor zijn destructors geniaal... vooral omdat destructors niet alleen blind meteen uitgevoerd worden bij het out-of-scope gaan, maar vooral ook omdat ze bij het gooien van exceptions nog steeds even netjes out-of-scope gaan! Dit is de grond van smart-pointers en intelligente locks zoals MSalters suggereert, bijv.:
code:
1
2
3
4
5
6
7
8
void SafeClass::Functie()
{
Lock        l_MyLock(m_MyCriticalSection);
SmartPointer    l_MyPointer = new Object;

if(true)
  throw MyException;
}

Als je je destructors goed ingevuld hebt in de goede object wordt hier altijd dat object correct vrijgegeven en wordt de critical section eveneens unlocked.

En wat multiple inheritance betreft: ja het is een grote kracht van C++, maar niet de overwinnende grote kracht, daarvoor gebruik je het te weinig (interface-style MI niet meegerekend).

Professionele website nodig?

Pagina: 1