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

1461

    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. Räppäri kuoli vankilassa

      Ei kuulemma ole tapahtunut rikosta. Sama vahinkohan kävi Epsteinille. https://www.hs.fi/suomi/art-2000011840869.html "
      Maailman menoa
      149
      5828
    2. Välillä kyllä tuntuu, että jaat vihjeitä

      Mutta miten niistä voi olla ollenkaan varma? Ja minä saan niistä kimmokkeen luulemaan yhtä sun toista. Eli mitä ajatella
      Ikävä
      35
      4243
    3. Näin Enter-napilla tehdään miljardi euroa - Helsingissä

      "Ei se nyt niin kovin ihmeelliseltä näytä. Tavallinen nappi, musta muovinpala, joka kököttää parikymppiä maksavan mustan
      Maailman menoa
      0
      3520
    4. Eipä tunnu se "pedofilia" huuto kiinnostavan

      Lähinnä se sekohäirikkö ressukka joutuu itse vastaileen itselleen, mitään näkyvyyttä ei saa, palstalla ylipäätään on hyv
      Maailman menoa
      49
      2741
    5. Minulla ei ole ketään muita

      Enkä halua ketään muita kuin sinut.
      Ikävä
      31
      2554
    6. No kyllä te luuserit voitte tehdä mitä vaan keskenänne, sitä en ymmärrä miksi pelaat,nainen

      Pisteesi silmissäni, edes ystävätasolla tippui jo tuhannella, kun sain selville pelailusi, olet toisen kanssa, vaikka ol
      Ikävä
      45
      2520
    7. Jätä minut rauhaan

      En pidä sinusta. Lopeta seuraaminen. Älä tulkitse keskustelutaitoa tai ystävällisyyttä miksikään sellaiseksi mitä ne eiv
      Ikävä
      32
      2498
    8. 4,5 promillee

      Aika rajut lukemat joku eilen puhaltanut.
      Suomussalmi
      16
      2408
    9. Harmittaako sinua yhtään?

      Tuntuuko pahalta ollenkaan?
      Ikävä
      43
      2065
    10. Ben Z: "SDP ei ole ollut 50 vuoteen näin huolissaan velasta"

      "– Olen ollut eduskunnassa noin 50 vuotta, eikä SDP ole koskaan ollut niin huolissaan velasta kuin nyt. Se on tietysti h
      Maailman menoa
      26
      2025
    Aihe