NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Diskuze – Lekce 3 - Hrací kostka v C++ a konstruktory

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Tomáš Rumíšek:24.3.2019 20:26

Ahoj,
zkoušel jsem ten kód ve kterém je main.cpp, Kostka.h a Kostka.cpp v jednom souboru (sekce před přetěžováním konstruktoru) rozhodit do tří souborů, ale při kompilaci to vyhodí chybu "error C2512: 'Kostka' : no appropriate default constructor available". Zkoušel jsem to spustit i tady na stránkách online a dopadlo to stejně. V čem je problém? Proč toto řešení funguje jen v rámci jednoho filu?

Díky, Tom

 
Odpovědět
24.3.2019 20:26
Avatar
Odpovídá na Tomáš Rumíšek
Patrik Valkovič:24.3.2019 21:52

Ahoj,
který konkrétně příklad ti nefunguje? Já teď spustil všechny a žádný z nich nehlásí žádný error.

Odpovědět
24.3.2019 21:52
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Imrich Vízi
Člen
Avatar
Imrich Vízi:21.7.2019 19:05

Zdravím,

tá varianta s

Kostka::Kostka(int _pocet_sten=6)

mi nefunguje.

main.cpp

#include <iostream>
#include "Kostka.h"

using namespace std;

int main()
{

        Kostka kostka;
        cout << kostka.pocet_sten << endl;


        cin.get();
        return 0;
}

Kostka.cpp

#include "Kostka.h"


Kostka::Kostka(int _pocet_sten=6)
{
        pocet_sten = _pocet_sten;
}


Kostka::~Kostka()
{

}

Kostka.h

#ifndef _KOSTKA_H_
#define _KOSTKA_H_

class Kostka
{
public:
        Kostka(int _pocet_sten);
        ~Kostka();
        int pocet_sten;
};


#endif

"error C2512: 'Kostka' : no appropriate default constructor available".

 
Odpovědět
21.7.2019 19:05
Avatar
Imrich Vízi
Člen
Avatar
Imrich Vízi:21.7.2019 19:08

Tiež mi nefunguje za predokladu použitia parametrického konštruktora

Kostka* dynamicky_sestisten = new Kostka;
Kostka* dynamicky_sestisten2 = new Kostka(); // bude fungovat

Zmenilo sa niečo od napísania článku ?

 
Odpovědět
21.7.2019 19:08
Avatar
Imrich Vízi
Člen
Avatar
Imrich Vízi:22.7.2019 18:15

Syntaxe je taková, že za deklaraci konstruktoru přidáme dvojtečku a následně název konstruktoru s jeho parametry.

Nepovažovali ste deklaráciu v predchádzajúcich článkoch za to, čo je obsiahnuté v Kostka.h a definíciu za to, čo je obsiahnuté v Kostka.cpp ?

 
Odpovědět
22.7.2019 18:15
Avatar
Odpovídá na Imrich Vízi
Patrik Valkovič:23.7.2019 11:02

Ahoj,
díky za upozornění, článek jsem opravil, snad už by vše mělo být jasné. Divím se, že na to ještě nikdo nepřišel.

Odpovědět
23.7.2019 11:02
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Josef Štěpáník:4.11.2022 14:55

Co ma za ucel konstruktor se znakem tilda ~ ? Tedy

Kostka::~Kostka()
 
Odpovědět
4.11.2022 14:55
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Josef Štěpáník
DarkCoder:4.11.2022 15:09

Nejedná se o konstruktor ale destruktor, více v následujícím článku.

Odpovědět
4.11.2022 15:09
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Zdeněk Dvorský:17.12.2022 16:53
Dostaneme ale stále stejnou chybu. Než se na instanci zavolá
libovolná metoda (včetně konstruktoru), musí být již instance správně
vytvořena. Musíme tedy C++ nějak říci, jak má hráče vytvořit
ještě před tím, než je vytvořena samotná Arena.
Zdroj: https://www.itnetwork.cz/cplusplus/oop/hraci-kostka-v-cplusplus-a-konstruktory

Možná by bylo vhodné zmínit i druhou variantu jak to udělat. Stačí do hlavičkových souboru Arena.h a Hrac.h přídat bezparametrické konstruktory a pak bude fungovat i tento zápis.

Arena::Arena()
{
    prvni = Hrac("Karel");
    druhy = Hrac("Pavel");
}
Zdroj: https://www.itnetwork.cz/cplusplus/oop/hraci-kostka-v-cplusplus-a-konstruktory
 
Odpovědět
17.12.2022 16:53
Avatar
Odpovídá na Zdeněk Dvorský
Patrik Valkovič:17.12.2022 20:54

Zápis sice fungovat bude, ale na pozadí se děje víc, než by se dalo vysvětlit. Nejprve se vytvoří hráči pomocí bezparametrického konstruktoru a uloží se do areny. Potom se vytvoří znovu se jmény a použije se move-assignment nebo copy-assignment operátor. Jinak řečeno, ten kód na pozadí je jiný a mnohem složitější.

Odpovědět
17.12.2022 20:54
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 13.