Problém s definicí tříd – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s definicí tříd – C / C++ – Fórum – Programujte.comProblém s definicí tříd – C / C++ – Fórum – Programujte.com

 

yaqwsx+9
Posthunter
19. 1. 2010   #1
-
0
-

Mám problém s definicí. Mám "hlavní třídu" A. Poté třídy B, C, které jsou atributy třídy A. Mám globální ukzatel na A; A* glob; a ve třídách B, C tento ukaztel používám:
main.cpp



//include, definice
A* glob;

int main..

A.h
//include, definice

class A
{
B b;
C c;
};

B.h
//include, definice

extern A* glob;
class B
{
void funkce();
};

B.cpp
#include "B.h"


void B::funkce()
{
glob->//zde nastává problém
}


Když to chci zkompilovat nedokážu se zbavit chyby v B.cpp "A používá nedefinovaný typ B". Problém dělá globální ukazatel na A. Když ale definici třídy B vložím do A.h, tak problém zmizí, ale takových tříd, které A obsahuje je hodně a ten soubor se stává nepřehledným.

Můj dotaz je, jak to zkompilovat tak, abych nemusel definici "podtříd" vkládat do A.h?
Děkuji za odpověď

Nahlásit jako SPAM
IP: 85.160.90.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
KIIV
~ Moderátor
+43
God of flame
19. 1. 2010   #2
-
0
-

kouzelne slovo je external

pripadne si do toho objektu predat pointer pri inicializaci nebo konkretni metodou

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
yaqwsx+9
Posthunter
20. 1. 2010   #3
-
0
-

To KIIV : Dky za dopověď, ale moc jsme nepochopil jak použít external. Nemohl by jsi mi to prosím objasnit?

Předávat ten ukazatel jako argument mě napdadlo, jenže mě to mělo napadnout dřív. Přidávat ten ten argument teď do kódu by bylo dost pracné...

Nahlásit jako SPAM
IP: 85.160.69.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
KIIV
~ Moderátor
+43
God of flame
20. 1. 2010   #4
-
0
-

v jenom souboru .cpp mas int globalni_promenna;
ale chces ji pouzivat i v druhem souboru .cpp ... kdyz ji i tam nadefinujes pomoci int globalni_promenna; tak bud na sebe "neuvidi" nebo neco zahlasi prekladac,.. sem nejak nezkousel

no a external slouzi k oznameni prekladaci: "bude tu promenna tohoto typu a takto nazvana, nicmene nepripravuj pro ni zadne misto, bude definovana v nejakem z jinych objektovych souboru.." je to to same jako deklarace funkce .. taky mas jen prototyp ale funkce sama je definovana jinde.. to same kdyz zapomenes definovat a pouzivas -> linker oznami chybu...

tj. 1.cpp: int globalni_promenna;
2.cpp: external int globalni_promenna;
3.cpp: external int globalni_promenna;
....

klidne se da dat s tim external do hlavickoveho souboru a include vsude kde je treba

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
yaqwsx+9
Posthunter
20. 1. 2010   #5
-
0
-

To KIIV : external není totožné s extern? Protože VC++ mi klíčové slovo external nebere. Pokud je to to samé, tak extern používám, mám i ho v příkladu. Bez něj to háže jinou chybu.
Mě právě zaráží "A používá nedefinovaný typ B", přesto B je definováno, použil jsme i předběžnou deklaraci...

Nahlásit jako SPAM
IP: 85.160.69.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
KIIV
~ Moderátor
+43
God of flame
20. 1. 2010   #6
-
0
-

no jo uz sem nejakej zblblej .. samozrejme extern..

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 14 hostů

Podobná vlákna

List v definici funkce — založil Abi Poe

šablony u tříd — založil Kuge

Více tříd — založil RePRO

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý