Hlavička – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hlavička – C / C++ – Fórum – Programujte.comHlavička – C / C++ – Fórum – Programujte.com

 

Martin
~ Anonymní uživatel
1600 příspěvků
14. 11. 2012   #1
-
0
-

Ahoj, mám na vás dotaz.

Zde v příkladu popíši:

Na tomto příkladu se mi hlavička vždy zaciklí...Je nějaký způsob jak tomu zamezit? Nějaké direktivum?

//--------a.h--------
#include "b.h"
class A
{
 b test;			
}

//--------b.h---------
#include "a.h"
class B
{
 A *test; 
}
Nahlásit jako SPAM
IP: 188.120.221.–
vitamin+8
Grafoman
14. 11. 2012   #2
-
0
-

   

#ifndef _A_H
#define _A_H

//...
// kod hlavicky
//...

#endif /* _A_H */

alebo:

#pragma once	//nemusi fungovat vsade

//...
// kod hlavicky
//...
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Martin
~ Anonymní uživatel
1600 příspěvků
14. 11. 2012   #3
-
0
-

Díky, ale toto mi nefunguje, i když si myslim, že by mělo. Skutečně to pomáhá i proti zaciklení hlaviček v hlavičkách?

Nahlásit jako SPAM
IP: 188.120.221.–
KIIV
~ Moderátor
+43
God of flame
14. 11. 2012   #4
-
0
-

pokud i v b.h nepouzivas  "_A_H" tak to fungovat musi...

maximalne budes muset jeste pred includem b.h v a.h nadeklarovat class A; a v b.h zase pred includem a.h  class B;

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
vitamin+8
Grafoman
14. 11. 2012   #5
-
0
-

#3 Martin
 

//--------a.h--------
#ifndef _A_H
#define _A_H

class A;

#include "b.h"

class A
{
 B* test;			
}

#endif
//--------b.h---------
#ifndef _B_H
#define _B_H

class B;

#include "a.h"

class B
{
 A *test; 
}

#endif
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Martin
~ Anonymní uživatel
1600 příspěvků
14. 11. 2012   #6
-
0
-

Zajímavé ale stále nefunguje, Bude chyba někde u mě:

Něco špatně? :)

//Unit2.h
#ifndef _B_H
#define _B_H
class A;
#include "Unit1.h"
class B
{
public:
	 A *abc;
};
#endif

//Unit1.h
#ifndef _B_H
#define _B_H
class B;
#include "Unit2.h"
class A
{
public:
	B abc;
};
//---------------------------------------------------------------------------
#endif
Nahlásit jako SPAM
IP: 188.120.221.–
Martin
~ Anonymní uživatel
1600 příspěvků
14. 11. 2012   #7
-
0
-

Pardon je to 

//Unit2.h
#ifndef _B_H
#define _B_H
class A;
#include "Unit1.h"
class B
{
public:
	 A *abc;
};
#endif

//Unit1.h
#ifndef _A_H
#define _A_H
class B;
#include "Unit2.h"
class A
{
public:
	B abc;
};
//---------------------------------------------------------------------------
#endif
Nahlásit jako SPAM
IP: 188.120.221.–
KIIV
~ Moderátor
+43
God of flame
14. 11. 2012   #8
-
0
-

takhle by to fungovat melo ( akorat se dava obecne nazev toho headeru jako kontrola -  tj _UNIT1_H a _UNIT2_H ...)

EDIT: akorat mas jeste blbe ty deklarace class A; a class B;  v souboru kde je A ma byt pred include A a ne B a naopak

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Martin
~ Anonymní uživatel
1600 příspěvků
14. 11. 2012   #9
-
0
-

Nyní to mám takto a stále nic:


//Unit1.h
#ifndef _UNIT1_H
#define _UNIT1_H
class A;
#include "Unit2.h"
class A
{
public:
	B abc;
};
//---------------------------------------------------------------------------
#endif



//Unit2.h
#ifndef _UNIT2_H
#define _UNIT2_H
class B;
#include "Unit1.h"
class B
{
public:
	 A *abc;
};
#endif
Nahlásit jako SPAM
IP: 188.120.221.–
KIIV
~ Moderátor
+43
God of flame
14. 11. 2012   #10
-
0
-

co znamena "stale nic" ?

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Martin
~ Anonymní uživatel
1600 příspěvků
14. 11. 2012   #11
-
0
-

Píše to: 

[BCC32 Error] Unit1.h(10): E2450 Undefined structure 'B'

[BCC32 Error] Unit1.h(10): E2449 Size of 'abc' is unknown or zero

Takto to funguje, ale nedělá to co bych si příl:


//Unit2.h
#ifndef _UNIT2_H
#define _UNIT2_H
class B;
//#include "Unit1.h"
class B
{
public:
	 //A *abc;
};
#endif



//Unit1.h
#ifndef _UNIT1_H
#define _UNIT1_H
class A;
#include "Unit2.h"
class A
{
public:
	B abc;
};
//---------------------------------------------------------------------------
#endif
Nahlásit jako SPAM
IP: 188.120.221.–
KIIV
~ Moderátor
+43
God of flame
14. 11. 2012   #12
-
0
-

a v cem to kompilujes? g++ s tim nema zadnej problem

Nahlásit jako SPAM
IP: 62.216.147.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Martin
~ Anonymní uživatel
1600 příspěvků
14. 11. 2012   #13
-
0
-

C++ Builder 2009 a ve Visual c++. C++ Builder 2009 píše chybu nahoře a visual něco ve smyslu, že chybí středník, ale ty tam všude jsou.

Nahlásit jako SPAM
IP: 188.120.221.–
Martin
~ Anonymní uživatel
1600 příspěvků
14. 11. 2012   #14
-
0
-

Už sem na to přišel, ale nechápu proč je v tomto zádrhel?

Takto to funguje, když jsou obě abc proměnné ukazatel. Když je jeden ukazatel a drhý ne tak to nefunguje...nechápu

//Unit2.h
#ifndef _UNIT2_H
#define _UNIT2_H
class B;
//#include "Unit1.h"
class B
{
public:
	 A *abc;
};
#endif



//Unit1.h
#ifndef _UNIT1_H
#define _UNIT1_H
class A;
#include "Unit2.h"
class A
{
public:
	B *abc;
};
//---------------------------------------------------------------------------
#endif
Nahlásit jako SPAM
IP: 188.120.221.–
Martin
~ Anonymní uživatel
1600 příspěvků
14. 11. 2012   #15
-
0
-

Ten //#include "Unit1.h" není zakomentovaný....

Nahlásit jako SPAM
IP: 188.120.221.–
vitamin+8
Grafoman
14. 11. 2012   #16
-
0
-

#15 Martin
Ten posledny kod funguje, ten predposledny kde nie je 'B abc'  pointer bude fungovat len ak najprv includnes "Unit1.h"

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Martin
~ Anonymní uživatel
1600 příspěvků
14. 11. 2012   #17
-
0
-

Velice vám děkuji vitamin a KIIV....díky vám se mi to podařilo zprovoznit, děkuji.

Nahlásit jako SPAM
IP: 88.83.169.–
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, 27 hostů

Podobná vlákna

Hlavička — založil Levin

TCp hlavicka — založil kuca

Responsivní hlavička — založil Pavel

Hlavička funkce — založil Kadla

Přihlášení hlavička — založil pavel

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ý