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

1579

    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. Kela tukee virallisesti Pride-liikettä

      Iso kiitos Kansaneläkelaitokselle tuen osoittamisesta myös vähemmistöille. Näin toimii vastuullinen valtiollinen koko k
      Maailman menoa
      144
      4672
    2. Pride-liputus närästää monissa Suomen kunnissa

      Suomen lipun nostamisesta on laki. Pride‑liputuksesta ei. Kieltäytyviin kuntiin kohdistuu poliittista painostusta kuin k
      Maailman menoa
      87
      3439
    3. Kävisikö tällainen sopimus?

      Olisitko valmis juttelemaan jo ensi viikolla kahden kesken?
      Ikävä
      106
      1668
    4. Nyt kerrot mies mitä ajattelet minusta

      Ihan suoraan ja suodattamatta.
      Ikävä
      90
      1519
    5. Työeläkeloisille ottaa koville heidän rikosten julki tuominen

      Niin koville, että yrittävät estää kansalaiskeskustelun, jolla turvattaisiin perustuslain takaama omaisuudensuoja palkan
      Maailman menoa
      7
      1492
    6. Odotatko vielä vastausta...

      Siihen viestiin? 🤔
      Ikävä
      105
      1019
    7. Omasp hakenut Fincapia ja Gapconia konkurssiin perjantaina 5.6

      Ilkka ei ole vielä ehtinyt uutisoida, mutta Omasp on jättänyt 5.6 konkurssihakemuksen Fincapia ja Gapconia koskien. Ilka
      Seinäjoki
      26
      943
    8. Mitä kirjainta haluaisit

      Ra kastella mahdottomasti?
      Ikävä
      46
      870
    9. Ehkä se on niin

      Ettet vaan uskalla lähestyä tämän jälkeen. Ehkä haluaisit. En osaa sanoa.
      Ikävä
      74
      854
    10. Jos oot täällä,laita tunniste.

      Muuten en lue!
      Ikävä
      47
      753
    Aihe