Stránka 1 z 1

Pořadí deklarace tříd (class)

Napsal: čtv 29. kvě 2008, 22:44
od kybrex
Zdravím, narazil jsem na problém, kdy kompilátor křičí, když mám deklaraci jednotlivých tříd za sebou v jednom souboru a v jedné nadřazené potřebuji jako private atribut zapsat ukazatel na objekt jiné třídy, která ale ze třídy nadřazené dědí. Tudíž potřebuji obě třídy deklarovat jako první, ale to samozřejmě nejde. Co s tím?

Kód: Vybrat vše

class Program
{
 private:
          Memory * memory;
          Menu * menu;
  
 public:
  
          Program();
          ~Program();
          int charToInt(char input);
          char intToChar(int input);
          Memory * getMemory() const { return memory; }
          Menu * getMenu() const { return menu; }
};

class Memory : public Program
{
 private:
          Matrix * pMatrixMemory[25]; // array of pointers

          int charToMemoryIndex(char input);
          char memoryIndexToChar(int input);
          int memoryStatus();

 public:

          Memory();
          ~Memory();
          Matrix * getMatrixPointer(int memoryIndex);
          bool storeMatrix(Matrix * pMatrix);
          bool delMatrix(int memoryIndex);
          bool delMemory();
          bool createMatrix();
};
Kompilátor křičí, že při deklaraci třídy Program nemám určený typ Memory a když přehodím pořadí tříd, tak zase třída Memory hlásí, že nemá odkud dědit. :?

Napsal: pát 30. kvě 2008, 09:02
od tst
proc mas Memory jako potomka tridy program? to preci neni treba

udelej memory jako samostatnou tridu a deklaraci hod pred deklaraci tridy program a je to

Napsal: pát 30. kvě 2008, 09:45
od kybrex
Původně to taky bylo, ale pak jsem potřeboval ve více třídách používat funkci chartToInt a intToChar a přišlo mi zbytečné psát jí všude znova, tak jsem ji deklaroval ve třídě program a pak jsem dědil. :) Ale asi to teda budu muset udělat jinak :-)

Napsal: pát 30. kvě 2008, 10:56
od tst
tak udelej spolecnyho predka jak tride program tak memory kde ji budes mit

nebo si ji dej do vlastni tridy v jinym souboru a includuj

Napsal: pát 30. kvě 2008, 12:00
od kybrex
jj. Jasný - v pohodě. Jen se mi nechtělo dělat extra třídu na tyhle funkce, když to nebude bezpodmínečně nutný, už jsem to vyřešil. Díky za tipy. :)

Napsal: pát 30. kvě 2008, 12:19
od tst
np

Napsal: pát 30. kvě 2008, 14:56
od €agle
Pokud potřebuješ používat jednu třídu v druhé, stačí udělat forward deklaraci obou tříd, tzn

Kód: Vybrat vše

class Program;
class Memory;

class Program
{
 ...
};

class Memory : public Program
{
 ...
};