C++ operator overloading (g++)

Koodari

Ongelma on tämä:

TOIMII: double foo = omatyyppi 3.1415;
TOIMII: double foo = 3.1415 static_cast(omatyyppi);
EI TOIMI: double foo = 3.1415 omatyyppi;

koe.c:18: error: ambiguous overload for 'operator '

Eli olen ylimääritellyt -operaation omatyypissä näin:

omatyyppi operator (double f) {...}

Ja lisäksi tyyppimunnosta doubleksi varten:

operator double() {...}

Onko mahdollista saada yhteenlasku toimimaan kuvatun kaltaisesti myös toisinpäin ilman erillistä tyyppimuunnosta? Ja miksei se nyt toimi vaikka tyyppimuunnosoperaattori on määritelty? g bugi?

5

1499

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • akin.2

      öh.. toi on kyllä jo jonkinnäköistä perversiota..

      jos haluat että tuo operator toimii vikassa tapauksessa, sun pitäis määritellä 3.1415:lle (miksi lie se muutetaankaan käännön/ajon yhteydessä.. stakissa olevaksi float:ksi doubleksi.. mene ja tiedä..) operaattori .. tätä et pysty tekee.. vaihtoehto olis tehdä omatyyppiwrapperi luokka joka wrappaa tollasen 3.1415 litanian ja tarjoaa rajapinnan tollaselle laskennalle..
      eg:

      class Numero
      {
      public:
      Numero( double aGiven ):iNumero(aGiven);
      double operator ( omatyyppi aBlaa ) { return aBlaa->getNumber() iNumero; }
      private:
      double iNumero;
      };

      // en nyt muista miten operaattorin overloadaus meni.. en ole käyttänyt vuosiin, myös varmaan luokan tunkeminen templateksi olis pRo temppu..

      tuolla saa wrapattua tylsästi:

      double foo = Numero( 3.1415 ) omatyyppi;

      /*
      toki tapoja tehdä tämä on monia.. tämä vain yksi nopeasti hutastu idea.. Sorsa on myös samaa tasoa, kiljoona virhettä..
      */

      • qwerty12345

        Luokan ulkopuolelle voi kyllä.
        X operator (double const a, X const& b) {
        X tulos;
        return tulos;
        }


      • Anonyymi

        MENE HOITOON!


    • Anonyymi

      Täytyy määritellä myös operaattori double-tyypiltä omatyypille. Esimerkiksi:

      omatyyppi operator +(double f) { ... }

      Tämä mahdollistaa yhteenlaskun, jossa double-tyyppinen arvo lisätään omatyypin arvoon.

      Virheilmoitus "ambiguous overload for 'operator '" tarkoittaa, että kääntäjä ei pysty päättämään, kumpaa operaattorifunktiota se tulisi käyttää, koska operaattoria on ylikuormitettu useammalla kuin yhdellä tavalla. Tässä tapauksessa sinun täytyy määritellä selkeämmin, miten haluat kääntäjän valitsevan operaattorin. Lisäksi varmista, että olet määritellyt kaikki tarvittavat operaattorit ja tyyppimuunnokset oikein.

    • Anonyymi

      Vaikuttaa että operaation operandien ja operaattorien käsitteet ovat nyt sekasin.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Kuinka Riikka Purra on parantanut Suomen kansalaisen elämää?

      Haastan kaikki perussuomalaisten kannattajat kertomaan konkreettisia esimerkkejä kuinka Riikka Purran harjoittama politi
      Maailman menoa
      116
      4055
    2. Iso poliisioperaatio Lapualla

      Paikalla oli silminnäkijän mukaan myös kolme ambulanssia. https://www.is.fi/kotimaa/art-2000011924650.html Onko virpo
      Lapua
      69
      3904
    3. Riikan antisakset leikkaavat bensan hintaa ylöspäin

      Sannan aikoina bensaa sai 1,3 euron litrahinnalla ja Riikka leikkasi sen euron ylemmäksi reiluun 2 euroon. Joko on saks
      Maailman menoa
      44
      2248
    4. Sukupuolineutraalit liikennemerkit yksi persujen älynväläys

      Samassa rytäkässä kaikki syrjäseutujen bussipysäkkien liikennemerkitkin vaihdettiin, vaikkei bussia ole liikennöinyt enä
      Maailman menoa
      56
      2224
    5. Oletko nähnyt hänet ilman...

      Vaatteita!?
      Ikävä
      58
      2114
    6. Oon niin surullinen

      Ettei meistä tullut sitä mitä toivoin
      Ikävä
      52
      1776
    7. Mitä sitten odotat

      Jos seurailet vain tekemisiäni
      Ikävä
      27
      1439
    8. Kehu kaivattuasi

      Mikä hänessä on parasta? Jos osaat kertoa muuta kuin ulkonäköön liittyvää, niin ansaitset mitalin.
      Ikävä
      110
      1238
    9. Vuoksesi kaiken

      Tekisin vuoksesi kaiken. Enemmänkin. Kunpa tietäisi ja hyväksyisit sen. Ymmärtäisit, en voi elää ilman sinua. En halua
      Ikävä
      115
      1193
    10. Missä yleensä törmäät kaivattuusi??

      Tai näet hänet!!
      Ikävä
      60
      1129
    Aihe