abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 05:55 | Komunita

    O víkendu probíhá v Praze na Karlově náměstí 13 konference Installfest 2026. Na programu je celá řada zajímavých přednášek a workshopů. Vstup na konferenci je zcela zdarma, bez nutnosti registrace. Přednášky lze sledovat i online na YouTube.

    Ladislav Hagara | Komentářů: 4
    dnes 05:22 | Komunita

    Mozilla a společnost Mila oznámily strategické partnerství za účelem rozvoje open source a suverénní AI. Cílem je ukázat, že open source AI může konkurovat uzavřeným systémům. Obě organizace chtějí posílit technologickou suverenitu a snížit závislost na hrstce velkých technologických firem.

    Ladislav Hagara | Komentářů: 3
    dnes 04:00 | Humor

    Adam Rice předvedl, že pomocí DNS lze distribuovat a spustit kompletní hru DOOM. Rozdělil WAD soubory a binárky do téměř 2000 DNS záznamů v Cloudflare zóně (jeden TXT záznam v DNS může nést okolo 2000 znaků textu). Ty pak stáhl PowerShellem, dekomprimoval a spustil přímo v paměti počítače bez nutnosti zápisu na disk, což prakticky dokazuje, že DNS může sloužit jako distribuované úložiště dat a možný kanál pro načítání kódu. Repozitář projektu je na GitHubu.

    NUKE GAZA! 🎆 | Komentářů: 3
    včera 13:00 | Komunita

    Dnes a zítra probíhají Arduino Days 2026. Na programu je řada zajímavých přednášek. Sledovat je lze od 17:00 na YouTube. Zúčastnit se lze i lokálních akcí. Dnes v Poličce v městské knihovně a zítra v Praze na Matfyzu.

    Ladislav Hagara | Komentářů: 9
    včera 12:11 | Nová verze

    Byla vydána beta verze Ubuntu 26.04 LTS s kódovým názvem Resolute Raccoon. Přehled novinek v poznámkách k vydání. Dle plánu by Ubuntu 26.04 LTS mělo vyjít 23. dubna 2026.

    Ladislav Hagara | Komentářů: 1
    včera 02:22 | Komunita Ladislav Hagara | Komentářů: 10
    26.3. 23:22 | Komunita

    Ubuntu plánuje v budoucích verzích nahradit tradiční nástroje pro synchronizaci času (chrony, linuxptp a gpsd) novým, v Rustu napsaným ntpd-rs, který nabídne vyšší bezpečnost a stabilitu.

    Ladislav Hagara | Komentářů: 3
    26.3. 22:33 | Nová verze

    Byla vydána nová verze 7.6 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Správce hesel KeePassXC byl nahrazen správcem hesel GNOME Secrets. Bitcoinová peněženka Electrum byla povýšena na verzi 4.7.0. Tor Browser byl povýšen na verzi 15.0.8. Další novinky v příslušném seznamu.

    Ladislav Hagara | Komentářů: 1
    26.3. 11:33 | Zajímavý článek

    Chris Down v obsáhlém článku „vyvrací mýty o zswap a zram“, vysvětluje, co vlastně dělají a jaké jsou mezi nimi rozdíly. Doporučuje vyhýbat se zram na serveru a bez OOM.

    |🇵🇸 | Komentářů: 1
    26.3. 11:22 | IT novinky

    Porota v Los Angeles shledala firmy Google a Meta odpovědnými v přelomovém soudním sporu, který se týká závislosti na sociálních sítích; firmy musí zaplatit odškodné tři miliony dolarů (63,4 milionu Kč). Společnosti, které s verdiktem nesouhlasí, čelily obvinění, že své sociální sítě a platformy záměrně navrhly tak, aby si na nich děti vypěstovaly závislost. Porota došla k závěru, že technologické společnosti při navrhování a

    … více »
    Ladislav Hagara | Komentářů: 15
    Které desktopové prostředí na Linuxu používáte?
     (15%)
     (7%)
     (1%)
     (12%)
     (30%)
     (2%)
     (5%)
     (1%)
     (13%)
     (24%)
    Celkem 1171 hlasů
     Komentářů: 27, poslední 17.3. 19:26
    Rozcestník

    Dotaz: problem s gcc

    26.8.2006 13:53 secido | skóre: 27
    problem s gcc
    Přečteno: 104×
    Tento kod mi so starsou verziu gcc fungoval:
    Fraction::Fraction(int znum, int zden) {
    num = znum;
    den = zden;
    normalize();
    }
    
    Fraction::Fraction(double f) {
    num = int(f) * 10000;
    num += int((f - int(f))*10000.0);
    den = 10000;
    normalize();
    }
    
    Fraction Fraction::operator+(Fraction b) {
    return Fraction(den*b.num+b.den*num, den*b.den);
    }
    
    ...
    
    c4=-.5+c1
    
    Teraz s pouzitim gcc 4.0.3 dostanem chybu:

    no match for ‘operator+’ in ‘-5.0e-1 + c1’

    Po takejto uprave to chodi:

    c4=Fraction(-.5)+c1

    V com je problem? Nemal by sa implicitne pouzit konstruktor Fraction(double)?

    Odpovědi

    26.8.2006 14:19 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: problem s gcc

    Aby vám tohle prošlo, musel byste použít samostatný operátor, ne metodu. Tedy např.:

    inline Fraction operator + (const Fraction& x, const Fraction& y)
    {
      return Fraction(x.den*y.num+y.den*x.num, x.den*y.den);
    }
    
    26.8.2006 20:51 secido | skóre: 27
    Rozbalit Rozbalit vše Re: problem s gcc
    Skusal som to pridat, ale den a num su private. Radsej uvediem kompletny kod. Trochu som cvicil s C++ pred par rokmi no daleko som sa nedostal, teraz som znovu dostal chut :-).
    fraction.h:
    #ifndef FRACTION_H
    #define FRACTION_H
    
    #include <iostream>
    
    using namespace std;
    
    class Fraction
    {
        int num, den;
    
        int gcd(int, int);
    
        public:
    
        Fraction(int = 0, int = 1);
        Fraction(double);
        Fraction(const Fraction&);
        void normalize();
        Fraction operator+(const Fraction&);
        Fraction operator-();
        Fraction operator-(const Fraction&);
        Fraction operator*(const Fraction&);
        Fraction operator/(const Fraction&);
        const int numerator() const;
        const int denominator() const;
        friend ostream& operator<<(ostream& os, const Fraction& z);
        friend istream& operator>>(istream& is, Fraction& z);
        const double toDouble() const;
    };
    #endif
    
    fraction.cpp:
    #include "fraction.h"
    
    int Fraction::gcd(int a, int b) {
      int c = 1;
      a = (a >= 0) ? a : - a;
      b = (b >= 0) ? b : - b;
      while (c > 0) {
        c = a % b;
        a = b;
        b = c;
      }
      return a;
    }
    
    Fraction::Fraction(int znum, int zden) {
      num = znum;
      den = zden;
      normalize();
    }
    
    Fraction::Fraction(const Fraction& z):num(z.num), den(z.den) {
      cout << "Fraction(const Fraction&) : " << *this << endl;
    }
    
    Fraction::Fraction(double f) {
      num = int(f) * 10000;
      num += int((f - int(f))*10000.0);
      den = 10000;
      normalize();
    }
    
    void Fraction::normalize() {
      int lgcd = gcd(num, den);
      num /= lgcd;
      den /= lgcd;
    }
    
    Fraction Fraction::operator+(const Fraction &b) {
      return Fraction(den*b.num+b.den*num, den*b.den);
    }
    
    Fraction Fraction::operator-() {
      return Fraction(-num, den);
    }
    
    Fraction Fraction::operator-(const Fraction& b) {
      return Fraction(b.den*num-den*b.num, den*b.den);
    }
    
    Fraction Fraction::operator*(const Fraction& b) {
      return Fraction(num*b.num,den*b.den);
    }
    
    Fraction Fraction::operator/(const Fraction& b) {
      return Fraction(num*b.den, den*b.num);
    }
    
    const int Fraction::numerator() const {
      return num;
    }
    
    const int Fraction::denominator() const {
      return den;
    }
    
    ostream& operator<<(ostream& os, const Fraction& z) {
      if(z.den == 1)
        return os << z.num;
      else
        return os << z.num << "/" << z.den;
    }
    
    istream& operator>>(istream& is, Fraction& z) {
      char c;
      is >> z.num;
      is >> c;
      is >> z.den;
      return is;
    }
    
    const double Fraction::toDouble() const
    {
      return double(num)/double(den);
    }
    
    fractest.cpp:
    #include <iostream>
    #include "fraction.h"
    
    #define P(x) cout << "[" #x "] = " << (x) << endl;
    
    /*
    inline Fraction operator+(const Fraction& x, const Fraction& y) {
      return Fraction(x+y);
    }
    */
    
    
    int main()
    {
        Fraction c1(12,123);
        Fraction c2(98);
        Fraction c3(0,1);
        Fraction* c5 = new Fraction(2,3);
    
        P(c1); P(c2); P(c3); P(*c5);
    
        P(c3=c1+c2);
        P(c3=c1-c2);
        P(c3=c1*c2);
        P(c3=c1/c2);
        P(*c5=c1+c2+c3);
        P(c3=c1+c2/c3-c1);
        P(c3=(c1+c2)/(c3-c1));
    
        Fraction c4 = c3;
        P(c4);
        P(c4=c1+5+5.5);
        P(c4=7);
        P(c4=-.5);
        P(c4=c4+c1);
        P(c4=Fraction(-.5)+c1);
    //    P(c4=-.5+c1);
        P(c4=c1-.5);
        P(c4.toDouble());
    //    P(double(c4));
    
        delete c5;
        return 0;
    }
    
    26.8.2006 22:22 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: problem s gcc

    Jestli je problém jen v tom, že jsou private, tak buď v implementaci operátoru použíjte přístupové metody numerator() a denominator() nebo ten operátor deklarujte jako friend.

    Mimochodem, z logiky věci by asi metodu gcd() bylo v tomto případě vhodnější deklarovat jako static.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.