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

1590

    Vastaukset 5

    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. Mikä on kaivattusi

      Nimi väärinpäin🤔🙃
      Ikävä
      84
      1120
    2. Mitkä on kaivattusi

      Nimen kolme ensimmäistä kirjainta Mar....
      Ikävä
      73
      942
    3. Minkä ikäinen on kaivattusi

      ja sinä? Vai tiedätkö hänen ikää?
      Ikävä
      37
      597
    4. Muiden vaikutus

      Oletko antanut muiden vaikuttaa mielipiteisiisi, tunteisiini tai valintoihisi suhteessa kaivattuusi?
      Ikävä
      81
      597
    5. Vähän hirvittää

      Että pystynkö täyttämään odotuksesi… jos oikeasti tutustutaan.
      Ikävä
      35
      571
    6. Milloin olette

      Nähneet viimeksi kaivattusi kanssa?
      Ikävä
      45
      542
    7. Ei kai nyt kukaan oikeasti kuvittele, että hallitus eroaisi Garden Helsingin takia?

      Ongelmanahan tässä kuitenkin on se, että mitään tavallisuudesta poikkeavaa ei ole tapahtunut. Joten mikä se eroperuste
      Maailman menoa
      140
      542
    8. Me (n & m)

      Toisillemme erityiset, vaikka emme ole toistemme elämässä kuin lyhyinä, ohikiitävinä hetkinä. Uskon, että koet samoin. T
      Ikävä
      14
      539
    9. No tavallaan seuraava kohtaaminen on käänteentekevä

      Koska sanon sulle että rakastan sua. On aika. Pösilö.
      Ikävä
      29
      534
    10. Ei hätää rakas

      Kaikki on hyvin ja linja pitää. Kohtaamiseen🤍
      Ikävä
      67
      516
    Aihe