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

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
kybrex
Začátečník
Začátečník
Uživatelský avatar
Registrován: 16. dub 2006
Bydliště: V sudu... (plnej samozřejmě)
Kontaktovat uživatele:

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

Příspěvek 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. :?

CPU: Intel Pentium (Prescott) 2,8GHz / 800MHz cache L1 16kB, L2 1MB; + CoolerMaster S9U1 Hyper TX MotherBoard: ASUS P5GD1PRO Intel 915P PCI-Express, GPU: ATI Radeon X700PRO 425MHz 128MB GDDR3 (860MHz), RAM: 2x256MB + 2x512MB 400MHz, HDD: Western Digital Caviar 320GB cache 16MB + Western Digital 1000GB 16MB cache, DVD mechanika: LG HL-DT-ST DVDRAM GSA-4082B writing: 8x DVD-R/+R, 4x DVD+RW/-RW, 3x DVD-RAM, 24x CD-R, 16x CD-RW reading: 12x DVD, 10x DVD-RW/+RW, 3x DVD-RAM, 32x CD. LCD: 19" AG Neovo F-419, CRT: 17" ADI Microscan M700, REPRO: Eltax concept 400 + Omnitronic P-250

NOTEBOOK:
Hewlett Packard 550 :: CPU: C2D T5270 @1,4GHz L2 Cache 2MB, FSB 800MHz, RAM: 2+2 GB DDR2 667 MHz, Chipset: Intel GME965, HDD: 160 GB 5400 RPM Serial ATA, DVD±RW, Komunikace: Modem 56 Kbit/s, 10/100 Mbit/s LAN Ethernet Controller, Wireless LAN 802.11a/b/g, BlueTooth
tst
Začátečník
Začátečník
Registrován: 18. led 2007
Kontaktovat uživatele:

Příspěvek 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
just me
kybrex
Začátečník
Začátečník
Uživatelský avatar
Registrován: 16. dub 2006
Bydliště: V sudu... (plnej samozřejmě)
Kontaktovat uživatele:

Příspěvek 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 :-)

CPU: Intel Pentium (Prescott) 2,8GHz / 800MHz cache L1 16kB, L2 1MB; + CoolerMaster S9U1 Hyper TX MotherBoard: ASUS P5GD1PRO Intel 915P PCI-Express, GPU: ATI Radeon X700PRO 425MHz 128MB GDDR3 (860MHz), RAM: 2x256MB + 2x512MB 400MHz, HDD: Western Digital Caviar 320GB cache 16MB + Western Digital 1000GB 16MB cache, DVD mechanika: LG HL-DT-ST DVDRAM GSA-4082B writing: 8x DVD-R/+R, 4x DVD+RW/-RW, 3x DVD-RAM, 24x CD-R, 16x CD-RW reading: 12x DVD, 10x DVD-RW/+RW, 3x DVD-RAM, 32x CD. LCD: 19" AG Neovo F-419, CRT: 17" ADI Microscan M700, REPRO: Eltax concept 400 + Omnitronic P-250

NOTEBOOK:
Hewlett Packard 550 :: CPU: C2D T5270 @1,4GHz L2 Cache 2MB, FSB 800MHz, RAM: 2+2 GB DDR2 667 MHz, Chipset: Intel GME965, HDD: 160 GB 5400 RPM Serial ATA, DVD±RW, Komunikace: Modem 56 Kbit/s, 10/100 Mbit/s LAN Ethernet Controller, Wireless LAN 802.11a/b/g, BlueTooth
tst
Začátečník
Začátečník
Registrován: 18. led 2007
Kontaktovat uživatele:

Příspěvek 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
just me
kybrex
Začátečník
Začátečník
Uživatelský avatar
Registrován: 16. dub 2006
Bydliště: V sudu... (plnej samozřejmě)
Kontaktovat uživatele:

Příspěvek 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. :)

CPU: Intel Pentium (Prescott) 2,8GHz / 800MHz cache L1 16kB, L2 1MB; + CoolerMaster S9U1 Hyper TX MotherBoard: ASUS P5GD1PRO Intel 915P PCI-Express, GPU: ATI Radeon X700PRO 425MHz 128MB GDDR3 (860MHz), RAM: 2x256MB + 2x512MB 400MHz, HDD: Western Digital Caviar 320GB cache 16MB + Western Digital 1000GB 16MB cache, DVD mechanika: LG HL-DT-ST DVDRAM GSA-4082B writing: 8x DVD-R/+R, 4x DVD+RW/-RW, 3x DVD-RAM, 24x CD-R, 16x CD-RW reading: 12x DVD, 10x DVD-RW/+RW, 3x DVD-RAM, 32x CD. LCD: 19" AG Neovo F-419, CRT: 17" ADI Microscan M700, REPRO: Eltax concept 400 + Omnitronic P-250

NOTEBOOK:
Hewlett Packard 550 :: CPU: C2D T5270 @1,4GHz L2 Cache 2MB, FSB 800MHz, RAM: 2+2 GB DDR2 667 MHz, Chipset: Intel GME965, HDD: 160 GB 5400 RPM Serial ATA, DVD±RW, Komunikace: Modem 56 Kbit/s, 10/100 Mbit/s LAN Ethernet Controller, Wireless LAN 802.11a/b/g, BlueTooth
tst
Začátečník
Začátečník
Registrován: 18. led 2007
Kontaktovat uživatele:

Příspěvek od tst »

np
just me
€agle
Středně pokročilý
Středně pokročilý
Uživatelský avatar
Registrován: 13. lis 2003
Bydliště: Vlastní 3D svět :)
Kontaktovat uživatele:

Příspěvek 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
{
 ...
};
Eagle3D Engine under developement

Hledáme do firmy schopného ASP/VB.NET/C# programátora, více po SZ
Odpovědět

Zpět na „Programování a web“