Objekt v jine tride – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Objekt v jine tride – C / C++ – Fórum – Programujte.comObjekt v jine tride – C / C++ – Fórum – Programujte.com

 

gomess
~ Anonymní uživatel
6 příspěvků
1. 4. 2017   #1
-
0
-

Hezky vecer,

Resim problem s pristupem k objektu ve tride. Potreboval bych poradit, jak spravne inicializovat a pristoupit k promenne _text v objektu b.

Muzu k ni pristoupit v Parse() a ParseBody(), kde ji naplnim. Ale nevim jak k ni mam pristoupit v metode Generate()

Snad to bude lip pochopitelne z kousku kodu ...

https://pastebin.com/1ff3NeZk

Diky za rady

Nahlásit jako SPAM
IP: 5.104.20.–
KIIV
~ Moderátor
+43
God of flame
1. 4. 2017   #2
-
0
-

#1 gomess
Popravde ten kousek kodu vubec nepomohl.

Kazdopadne: nikde tam nemas inicializaci toho pointeru  B * b; ve tride A. Implicitni konstruktor to pravdepodobne resit nijak nebude.

Nahlásit jako SPAM
IP: 94.113.99.–
Program vždy dělá to co naprogramujete, ne to co chcete...
gomess
~ Anonymní uživatel
6 příspěvků
2. 4. 2017   #3
-
0
-

#2 KIIV Jde prave o tu inicializaci nebo o spravny pristup k pointeru. S promennou _text muzu pracovat jen v C::Parse() a a->ParseBody(). Moje otazka zni jak s ni muzu pracovat i v jinych metodach C. 

Nahlásit jako SPAM
IP: 5.104.20.–
KIIV
~ Moderátor
+43
God of flame
2. 4. 2017   #4
-
0
-

#3 gomess
Jelikoz je public, tak k ni musis mit pristup kdykoliv, kdy mas instanci tridy A.

Nicmene - proc pouzivas ve tride A pointer na tridu B? Tj.: B* b;
V tomto pripade pak musis dodrzet takzvane Rule of three (starsi c++ standardy) nebo Rule of five (standard c++11 a dale). Tj. musis mit vlastni copy constructor, copy assignent operator a hlavne destruktor. U pravidla peti se jeste pridava move constructor a move assigment operator. Proste abys zarucil, ze se ti neztraci pamet a tak.

Ostatne tady neni moc opodstatnene vubec pouzivat tridu B kvuli jednomu retezci. Ale dejme tomu ze v realnem kodu je to o necem jinem.

Pak napriklad jestli iterujes v listu takto:

  while(iter = _Parsed.begin()) // iterate over list
  {
    iter->GenerateBody();
  }

nebo pridavas do listu _Parsed novou polozku takto:

   a.push_Back(_Parsed);

tak to nemusi fungovat i kvuli necemu jinemu nez myslis.

Nahlásit jako SPAM
IP: 94.113.99.–
Program vždy dělá to co naprogramujete, ne to co chcete...
gomess0
Duch
2. 4. 2017   #5
-
0
-

#4 KIIV

je tam trida B pro Body a dalsi trida pro Head s vice attributy, ale to jen stranou ....

V iteraci ani pridavani do seznamu by problem byt nemel, ke vsem promennych ve tride A, se bez problemu dostanu odkudkoliv, jen _text mi vraci prazdny retez, jinde nez v tech dvou metodach.

Nahlásit jako SPAM
IP: 5.104.20.–
KIIV
~ Moderátor
+43
God of flame
2. 4. 2017   #6
-
0
-

#5 gomess
To je ale velice dulezita informace. Znamena to, ze nekde delas treba melkou kopii, nebo upravujes kopii a ne puvodni objekt nebo podobne...

Nahlásit jako SPAM
IP: 94.113.99.–
Program vždy dělá to co naprogramujete, ne to co chcete...
gomess0
Duch
2. 4. 2017   #7
-
0
-

#6 KIIV
Diky za rady.

Predelal jsem to do jedne tridy (je to prozatimni reseni, ale musim se v projektu posunout dal), jakmile budu mit chvilku tak se na to zase podivam.

Nahlásit jako SPAM
IP: 5.104.20.–
KIIV
~ Moderátor
+43
God of flame
2. 4. 2017   #8
-
0
-

Proste, pokud by to byla zkompilovatelna ukazka toho chybneho chovani, tak se to da projit a rici.

Takhle ti muzu akorat doporucit naucit se pracovat s debuggerem.

Nahlásit jako SPAM
IP: 94.113.99.–
Program vždy dělá to co naprogramujete, ne to co chcete...
gomess0
Duch
2. 4. 2017   #9
-
0
-

#8 KIIV
Cely kod ma asi 2k radku. Ten by se sel spatne postoval ... Jinak, muzete mi nejaky debbuger dporucit? Zkousel jsem DBG, ale moc jsem se s nim nespratelil.

Nahlásit jako SPAM
IP: 5.104.20.–
Kit+15
Guru
2. 4. 2017   #10
-
0
-

#7 gomess
2k řádek v jedné třídě? Znám lepší a méně bolestivé způsoby sebevraždy.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
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, 111 hostů

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ý