Portál AbcLinuxu, 10. května 2025 02:20

Dotaz: c++ cyklická závislost mezi třídami

6.5.2010 11:13 midnighter
c++ cyklická závislost mezi třídami
Přečteno: 806×
Odpovědět | Admin
Mám následující problém:
(kod je zjednodušený)

main.cc:

#include "csvReader.h" int main()
{
csvReader r;
r.read();
}


csvReader.h:
#include "configCsvReader.h"
class csvReader
{
public:
csvReaderConfig read();
}


configCsvReader.h:
#include "csvReader.h" class configItem
{
public:
virtual execute();
}
class csvReader: public configItem
{
public:
csvReaderConfig read();
}
Jde to tu cyklickou závislost mezi třídami. Pokud sem použil další .h soubor a dal do něj jenom prázdné deklarace tříd tak mi překladač píše nekompletní typ. A když použiju ukazatele tak zase nemůžu použít konstruktor třídy csvReader v třídě configCsvReader Vubec netuším jak se z toho hnout. Nemá někdo nějaký nápad? Díky za odpovědi

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.5.2010 11:18 midnighter
Rozbalit Rozbalit vše Re: c++ cyklická závislost mezi třídami
Odpovědět | | Sbalit | Link | Blokovat | Admin
samozřejmě sem zapoměl dodat že ve všech hlavičkových souborech používám header guards
6.5.2010 12:47 Sinuhet | skóre: 31
Rozbalit Rozbalit vše Re: c++ cyklická závislost mezi třídami
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nevidim definici tridy csvReaderConfig.
6.5.2010 13:01 midnighter
Rozbalit Rozbalit vše Re: c++ cyklická závislost mezi třídami
moje chyba, koukám že se mi to tu trochu popletlo. třída je samozřejmě definovaná takto
class csvReaderConfig: public configItem
{
public:
execute();
}

6.5.2010 13:09 Sinuhet | skóre: 31
Rozbalit Rozbalit vše Re: c++ cyklická závislost mezi třídami
OK, ale ted pro zmenu nevidim tu cyklickou zavislost, csvReader se v configCsvReader.h vubec nevyskytuje.
6.5.2010 13:16 midnighter
Rozbalit Rozbalit vše Re: c++ cyklická závislost mezi třídami

tak snad na potřetí už nezapomenu napsat všechno potřebne:

//csvReaderConfig.h

#include "csvReader.h"

class csvReaderConfig: public configItem

{

private: csvReader reader;

public: execute();

}

6.5.2010 13:13 lokki
Rozbalit Rozbalit vše Re: c++ cyklická závislost mezi třídami
Odpovědět | | Sbalit | Link | Blokovat | Admin
Heslo "forward declaration": Tu alebo tu.
6.5.2010 13:15 lokki
Rozbalit Rozbalit vše Re: c++ cyklická závislost mezi třídami
6.5.2010 13:28 midnighter
Rozbalit Rozbalit vše Re: c++ cyklická závislost mezi třídami
Ano tuto možnost sem již zminoval. Takže bez použití ukazatelů cyklická závislost vyřešit nejde?
6.5.2010 15:51 Jirka P
Rozbalit Rozbalit vše Re: c++ cyklická závislost mezi třídami
6.5.2010 13:41 midnighter
Rozbalit Rozbalit vše Re: c++ cyklická závislost mezi třídami
Odpovědět | | Sbalit | Link | Blokovat | Admin

ještě bych měl tedy jeden dotaz. jak deklarovat dědičnost třídy?

když mám zadeklarováno

class configItem;

a potřebuju zadeklarovat

class configCsvReader:public configItem;

překladač vyhodí chybu. a když zadám do deklarace jen

class configCsvReader;

překladač zase křičí při definici třídy, kdy už používám

class configCsvReader:public configItem
{
...
}
6.5.2010 15:55 Jirka P
Rozbalit Rozbalit vše Re: c++ cyklická závislost mezi třídami
Když bude configItem definován, tak by to mělo fungovat.
6.5.2010 16:36 midnighter
Rozbalit Rozbalit vše Re: c++ cyklická závislost mezi třídami

Vyřešeno. Nakonec stačilo opět udělat protypy zpětně pro csvReader v config.h a pro configCsvReader v csvReader.h

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.