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 12:22 | Nová verze

    Desktopové prostředí LXQt (Lightweight Qt Desktop Environment, Wikipedie) vzniklé sloučením projektů Razor-qt a LXDE bylo vydáno ve verzi 2.5.0. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    dnes 12:11 | Nová verze

    Byla vydána (𝕏) nová verze 8.0 LTS open source monitorovacího systému Zabbix (Wikipedie). Přehled novinek v oznámení na webu, v poznámkách k vydání a v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    dnes 04:22 | Nová verze

    Byla vydána verze R14.1.7 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.

    JZD | Komentářů: 3
    dnes 00:33 | Nová verze

    Bazzite (Wikipedie), tj. linuxová distribuce vycházející z Fedora Linuxu a optimalizována pro hraní počítačových her, byla vydána ve verzi 45. S Open Gaming Collective (OGC) jádrem a novým Easy Anti-Cheatem pro Linux (EAC Linux v2).

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | Bezpečnostní upozornění

    MikroTik zveřejnil vlastní bezpečnostní upozornění potvrzující, že zranitelnost linuxového jádra postihuje také RouterOS 7. Jde o use-after-free při zpracování IPv4 TCP spojení s IP options. Zranitelnost se týká provozu směřujícího na TCP službu samotného routeru, nikoli paketů, které router pouze přeposílá. Opraveno v long-term od 7.24.6, v stable od 7.25.1 a devel od 7.26beta5.

    vencour | Komentářů: 0
    včera 17:00 | Bezpečnostní upozornění

    Ve správci balíčků APT, používaném v Debianu a odvozených distribucích, byla nalezena a opravena kritická zranitelnost CVE-2026-109518. Vzdálený útočník může obejít ověření stažených balíčků pomocí přesměrování a dočasných chyb HTTP serveru.

    Ladislav Hagara | Komentářů: 1
    včera 13:11 | IT novinky

    Nejvyšší kontrolní úřad (NKÚ) vydal zprávu o finančním řízení prostředků EU v ČR (pdf). Dočíst se lze například, že přes 8 miliard korun na digitální vzdělávání nepřineslo naplnění žádného z prioritních cílů programu. Peněžní prostředky z fondů EU sice byly vynaloženy formálně v souladu s právními předpisy, avšak s minimálním nebo neprokazatelným dopadem na proklamované cíle ve vzdělávání. Na Metodickém portálu RVP.CZ bylo ke konci

    … více »
    Ladislav Hagara | Komentářů: 20
    včera 11:33 | Nová verze

    Emulátor terminálu kitty (Wikipedie, GitHub) byl vydán v nové verzi 0.50.

    Ladislav Hagara | Komentářů: 3
    včera 09:00 | Bezpečnostní upozornění

    Vývojáři C-Kermit oznámili několik dlouhodobě přítomných zranitelností. Patří mezi ně buffer overflow v Telnet/FTP klientovi a command injection v Kermit serveru. Dotčené verze: C-Kermit 11.0.514 a starší. Fix: 11.1.515 [oss-security].

    vencour | Komentářů: 0
    včera 02:44 | Nová verze

    Byla vydána nová verze 3.2.8 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP je již k dispozici také na Flathubu.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (30%)
     (9%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2982 hlasů
     Komentářů: 34, poslední 26.10. 08:24
    Rozcestník

    Dotaz: problem s gcc

    26.8.2006 13:53 secido | skóre: 27
    problem s gcc
    Přečteno: 289×
    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: 72 | 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: 72 | 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ákno • Nahoru

    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.