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

1589

    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. Paljonko meidän ikäero on?

      Ois kiva tietää.
      Ikävä
      121
      1200
    2. Nainen onko kaikki

      Onko sinulla nainen kaikki hyvin? mies
      Ikävä
      113
      921
    3. Mies onko sinulla

      Kaikki hyvin? 🌞 -nainen
      Ikävä
      42
      670
    4. Työttömät risusavottaan

      Tuli tässä juhannusnuotiolla sellainen idea mieleen, että miksei työttömiä velvoiteta tekemään hanttihommia, kuten risus
      Maailman menoa
      274
      663
    5. Jos tunnistit...

      Voit hyvin ottaa yhteyttä...olisi mukava jutella☺️
      Ikävä
      59
      577
    6. Kuka tai ketkä tappo eilen?

      Kenet ja miksi?
      Varkaus
      10
      560
    7. Arvostele kaivattusi

      ulkonäköä, asteikolla 1-10. Perustelut myös 🧢
      Ikävä
      36
      481
    8. Miksi voit niin

      Huonosti? Ei se voi johtua vain minusta?
      Ikävä
      54
      470
    9. Väsynyt odottamiseesi, M.

      Vaikka et minua haluaisi tai huolisi, asia pitäisi käydä lävitse. Siksi etten sinusta pääse ylitse. Pystyisinkö tyytym
      Ikävä
      36
      463
    10. Persujen kansanedustaja häpäisi lipun!

      "Persujen kansanedustaja Pekka Aittakumpu julkaisi Instagramissa videon, jossa hän heittää Pride-lipun roskiin. Video on
      Maailman menoa
      189
      455
    Aihe