IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 3. diel - Hracia kocka v C ++ a konštruktory

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
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

 
Odpovedať
24.3.2019 20:26
Avatar
Odpovedá 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.

Odpovedať
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".

 
Odpovedať
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 ?

 
Odpovedať
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 ?

 
Odpovedať
22.7.2019 18:15
Avatar
Odpovedá 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.

Odpovedať
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()
 
Odpovedať
4.11.2022 14:55
Avatar
DarkCoder
Člen
Avatar
Odpovedá 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.

Odpovedať
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
 
Odpovedať
17.12.2022 16:53
Avatar
Odpovedá 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ší.

Odpovedať
17.12.2022 20:54
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!