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

1556

    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. Onko kaivattusi ulkonäkö

      tarpeeksi miellyttävä? 🥕
      Ikävä
      87
      1504
    2. Toivotko koskaan mies...

      Että nähtäis ja aloitettais alusta, puhtaalta pöydältä tutustuminen. Olit oikeassa ei me kunnolla tunnettu. Olin hölmö.
      Ikävä
      114
      1400
    3. Satuolennoista tarinointi ei kuulu peruskoulun tehtäviin

      Opetustunteja on muutenkin käytössä vain rajallinen määrä. Eli nämä satuhommat koulun ulkopuolelle vapaaehtoisiin harras
      Maailman menoa
      53
      1211
    4. Svty paska työpaikka

      Elekää kukaan hakeku sinne töihin.
      Suomussalmi
      28
      1104
    5. Kyllä näin 45 vuotiaana miehenä pitää sanoo, että 40-50v naiset näyttää vanhoilta

      Niin väsynyttä, silmäryppyä, harmaata hiusta jne jne
      Ikävä
      118
      952
    6. Olisin valmis salaisiin tapaamisiin

      Juuri sinun kanssasi mies. Olet saanut minun pääni pyörälle ja ajatukseni pyörimään ympärilläsi. Hittoon velvollisuudet
      Intohimo
      46
      908
    7. Onko viisikko aktivoitunut

      Taas ruumis !! Viisikko ryskää kukaan ei pärjää
      Seinäjoki
      19
      872
    8. Olisit voinut olla...

      ....ihan tavallinen ihminen, terve mieleltään ja kropaltaan, hyvä seuraihminen ja luotettava kumppani. Mutta ei, olit n
      Ikävä
      65
      797
    9. Olet ihana mies

      Mun söpöliini 🙊😘
      Ikävä
      46
      723
    10. YT skoda Transtech

      Noin 200 saa potkut. Saksikäsipetturi ajoi suomen konkkaan ja tarkkikselle. Totaalinen Petosjytky..
      Kajaani
      76
      715
    Aihe