Portál AbcLinuxu, 1. června 2025 04:13


Dotaz: Deklarace podtřídy

Blackhex avatar 6.9.2005 20:07 Blackhex | skóre: 16 | Brno, Frýdek-Místek
Deklarace podtřídy
Přečteno: 83×
Odpovědět | Admin
Dobrý den.

Programuju trochu složitější věc v C++ a narazil jsem na problém. Mám definovány třídy s podtřídami (doufám, že označení podtřída pro třídu uvnitř jmenného prostoru jiné třídy je správné):
class Nadtrida_1
{
  class Podtrida_1
  {
    Typ atribut;
  }
  Typ atribut;
  Nadtrida_2::Podtrida_2 * ukazatel;
}

class Nadtrida_2
{
  class Podtrida_2
  {
    Typ atribut;
  }
  Typ atribut;
  Nadtrida_1::Podtrida_1 * ukazatel;
}
Je to sice zverstvo :-), ale mam k tomu sve duvody. Nadtrida_1 a Nadtrida_2 jsou kazda v jinem hlavickovem souboru a tudiz nemuzu pouzit include. Chci tedy pouzit delaraci te druhe tridy v hlavickovem souboru te prvni:
class Nadtrida_2; // v souboru s Nadtrida_1

class Nadtrida_1; // v souboru s Nadtrida_2
Tohle by bylo vpohode. Problem je v tom, ze potrebuju i deklarace tech podtrid:
class Nadtrida_2; // v souboru s Nadtrida_1
class Nadtrida_2::Podtrida_2;

class Nadtrida_1; // v souboru s Nadtrida_2
class Nadtrida_1::Podtrida_1;
Na což už překladač nadává:
error: expected type-name
Neuvědomuju si žádný důvod proč by podtřídy nemohly mít deklarace, ale pokud tomu tak je, tak bych rád věděl proč. Děkuju za odpověď.
المفتاح المستعمل ﻻ يصدأ
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.9.2005 20:21 #Tom
Rozbalit Rozbalit vše Re: Deklarace podtřídy
Odpovědět | | Sbalit | Link | Blokovat | Admin
Podle toho, co jsem našel, to možné není. Můžete zkusit tohle:
class Nadtrida {
public:
  class Podtrida {
  };
};

class Nadtrida_1 : public Nadtrida
{
public:
  class Podtrida_1 : public Podtrida
  {
    int atribut;
  };
  int atribut;
  Nadtrida::Podtrida * ukazatel;
};

class Nadtrida_2 : public Nadtrida
{
public:
  class Podtrida_2 : public Podtrida
  {
    int atribut;
  };
  int atribut;
  Nadtrida::Podtrida * ukazatel;
};
Blackhex avatar 6.9.2005 20:34 Blackhex | skóre: 16 | Brno, Frýdek-Místek
Rozbalit Rozbalit vše Re: Deklarace podtřídy
No jedodušší by bylo rovnou použít místo Nadtrida::Podtrida * ukazatel; void * ukazatel; a nic nedědit, ale myslím, že kdybych to pak v kódu přetypovával, tak bych narazil na stejný problém. Mohl by jste mi tu dát, linky na to, co jste našel? Děkuji za odezvu.
المفتاح المستعمل ﻻ يصدأ

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.