Anonymní profil ondra.holub – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil ondra.holub – Programujte.comAnonymní profil ondra.holub – Programujte.com

 

Příspěvky odeslané z IP adresy 85.207.23.–

C / C++ › Programovací jazyk
28. 12. 2012   #169470

#3 TheOndrap
No pokud to má zjistit ze zdrojáku, tak platí, že program je napsaný v jazyce X tehdy, pokud lze přeložit překladačem (nebo spustit interpreterem) jazyka X. Samozřejmě je tu problém, že některý zdroják lze přeložit jenom s určitými parametry.

C / C++ › Operátor << u globalni funkce
16. 9. 2012   #163210

Funkce void Zpracuj() nebere žádný parametr a nic nevrací. Takže jí nic nemůžeš předávat.

Zpracuj() << cokoliv

je pak nesmysl, protože pro typ void (což je návratový typ funkce Zpracuj()) není definován operátor <<. A definovat ani nejde, protože by se to muselo napsat jako

void operator<<(void, const char* txt)
{
}

A to je nesmysl.

To, co je levým operandem operátoru << musí být třída nebo nějaký enum.

C / C++ › shared_ptr - operator pretyp…
7. 7. 2012   #159831

#3 Koudis
Pořád si ještě můžeš udělat vlastní třídu zděděnou ze std::shared_ptr. Jenom znovu opíšeš konstruktory a přidáš ten operátor přetypování.

template<typename T>
class my_shared_ptr: public std::shared_ptr<T>
{
    typedef
        std::shared_ptr<T> Base;

public:
    explicit my_shared_ptr(T* ptr): Base(ptr) { }

    operator T*()
    {
        return Base::get();
    }

    operator const T*() const
    {
        return Base::get();
    }

};

Ale je třeba si uvědomit nebezpečí, která jsem zmínil v předešlé odpovědi.

C / C++ › shared_ptr - operator pretyp…
7. 7. 2012   #159829

#3 Koudis
Jestli jde jenom o to, aby se ten shared_ptr dal předávat jako parametr funkcím, které požadují obyčejný ukazatel, tak tam musíš strčit ten get. Pokud se totiž začnou mixovat "chytré" ukazatele s obyčejnými, tak je potřeba to dělat s rozmyslem a člověk musí vědět přesně, co se uvnitř té funkce děje. Ta funkce může na ten (obyčejný) ukazatel zavolat třeba delete nebo z něj může udělat další instanci chytrého ukazatele. To obvykle rozbije celý mechanismus reference countingu a program nakonec začne padat - obvykle na naprosto nečekaném místě.

Jak píšeš, je logické, že tento operátor tam není.

C / C++ › shared_ptr - operator pretyp…
7. 7. 2012   #159821

Přetypování? Myslíš metodu, která vrátí obyčejný ukazatel? Ta se jmenuje get(). Pokud myslíš něco jiného, tak to rozveď.

C / C++ › členská funkcia / funkcia
5. 7. 2012   #159780

  1. Členská funkce a metoda je totéž
  2. Pokud se jedná o statickou metodu (členskou funkci), je to totéž, jako obyčejná funkce. Jediný rozdíl může být viditelnost (pokud je private nebo protected, tak nejde přímo volat zvenku té třídy
  3. Pokud to není statická metoda, tak ji nelze volat bez instance příslušné třídy (obyčejnou funkci nebo statickou metodu lze)
  4. S bodem 3 silně souvisí i rozdílnost ukazatele na funkci a ukazatele na (nestatickou) metodu.

C / C++ › Permutance reteczu podle abe…
12. 5. 2012   #157885

Předpokládám, že chceš, aby funkce sort seřadila pole řetězců. Ale předáváš jí jenom jeden řetězec (bere typ char*). text[i] je v ní pak jenom jeden znak.

C / C++ › Nemožné problémy s delete[]
3. 3. 2012   #154267

#1 Cpp_Amater
KIIV už tu chybu vypíchl.

Jinak (mimo dotaz) - proč vůbec pořád dokola kopíruješ ten řetězec? První kopie se udělá při volání funkce StringToInt. Ta je sice obvykle rychlá, protože se obvykle jenom inkrementuje reference counter, ale i tak je zbytečná. Stačila by zde reference na konstantní string.

Dále: pak ten řetězec překopíruješ do extra alokovaného bufferu c. Proč? Vždyť totéž se dá číst i přímo z s předaného jako parametr funkci. Mimochodem - toto je typická konstrukce ortodoxních zastánců názoru, že implementace s klasickým céčkovým stringem je vždy rychlejší než std::string.

A na závěr bych zvážil použití konstrukce switch místo série if ... else if ... Výsledná binárka asi bude úplně stejná, ale subjektivně si myslím, že je ten program mnohem čitelnější, protože se mi někde uprostřed switche nemůže schovat žádná odlišná podmínka.

C / C++ › Kompilator pre C++
28. 1. 2012   #152981

Jak už psali někteří přede mnou, z pohledu licence na Visual Studio Express je to v pořádku.

Jenom záleží, jestli neporušíš vnitřní předpisy firmy, které patří ten počítač. To už je v každé firmě jinak. Někde si můžeš nainstalovat skoro cokoliv, někde free software a někde nic.

C / C++ › virtual metoda a soubor .h
27. 12. 2011   #151696

#3 Jana24
Tak to hlásí asi z toho důvodu, že definice metody je v headeru, který se inkluduje do více souborů. Takže ta definice pak existuje vlastně vícekrát a překladači (nebo spíš linkeru) je už jedno, že je stejná.

Takže buď ji (tu definici metody) přesuň do nějakého cc souboru (nebo cpp, C, cxx - podle toho, co používáš) nebo pokud ji potřebuješ v headeru, tak před ni připiš inline.

C / C++ › priorita operáturů
7. 5. 2011   #141683

To David10101 : Provede se to v tomto pořadí:

obcan = ((volba=='a') ? true : false)
A udělá to tedy to samé jako
obcan = volba=='a'

C / C++ › První krůčky a hned problém
11. 9. 2010   #133522

Nainstaluj si codeblocks (z www.codeblocks.org), jak už tu někdo výše doporučoval. DevCpp je poměrně zastaralé a asi ne moc udržované.

C / C++ › Seřazení pole řetězců dle ab…
16. 5. 2010   #129012

Naš si psát quicksort, když už ho napsal někdo jiný:

#include <stdio.h>

#include <string.h>
#include <stdlib.h>

struct Clovek
{
const char* jmeno;
const char* prijmeni;
};

struct Clovek Lidi[] =
{
{ "Karel", "Lopuch" },
{ "Alois", "Abecedni" },
{ "Franta", "Jetel" }
};

int PorovnejLidi(const void* c1, const void* c2)
{
const struct Clovek* cl1 = (const struct Clovek*)c1;
const struct Clovek* cl2 = (const struct Clovek*)c2;

return strcmp(cl1->prijmeni, cl2->prijmeni);
}

void Vypis()
{
size_t i;
for (i = 0; i < sizeof(Lidi) / sizeof(Lidi[0]); ++i)
{
printf("%s %s\n", Lidi[i].jmeno, Lidi[i].prijmeni);
}
printf("\n");
}

int main()
{
Vypis();
qsort(Lidi, sizeof(Lidi) / sizeof(Lidi[0]), sizeof(struct Clovek), PorovnejLidi);
Vypis();

return 0;
}

C / C++ › pomoc s příkladem z Mistrovs…
9. 8. 2009   #114265

Záleží na tom, jak máte deklarovanou obecnou šablonu. Pokud to je

template<typename T>

const T& maxn(const T pole[], size_t delka);
tak specializace je
template<>

const char* const& maxn(const char* const pole[], size_t delka);
. Pokud to je
template<typename T>

T maxn(const T pole[], size_t delka);
tak specializace je pak
template<>

const char* maxn(const char* const pole[], size_t delka);
Pro praxi je jednodušší vyrobit netemplatovanou verzi funkce s konkrétními parametry a překladač jí dá přednost. Ale jako procvičení zhruba tak, jak jsem uvedl.

C / C++ › Prohlížení/výpis souborů v a…
9. 8. 2009   #114264

To Sergei : No pokud linker napsal tuto hlášku, tak nejspíš nenašel zmiňovanou knihovnu. Takže chybělo jenom přidat ji do cest, kde má linker knihovny hledat. I když s VS nepracuji, tak to tam určitě jde.

C / C++ › Čtení a zápis do souboru s d…
30. 7. 2009   #113852

Předpokládám, že se jedná o windows (podle kódové stránky). Je dobré si uvědomit, že konzole nepoužívá kódování Cp1250, al 852 (nebo tak nějak).

ondra.holub
C / C++ › problém s typeid
27. 6. 2009   #111152

To nikto : Ano, máte pravdu. Asi jsem to pořádně nedočetl do konce. Pak souhlasím s tím, že to vypadá na bug v překladači.

ondra
C / C++ › iterace v seznamu
9. 11. 2008   #89380

To kterosuom : Pokud mám iterátor na nějaký prvek, tak iterátor na předešlý je (iter - 1).

 

 

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