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. Kuinka vanha kaivattusi on?

      Gallup teille kaikille
      Ikävä
      76
      1043
    2. Mitä teillä grillataan juhannuksena? Anna oma vinkkisi grilliherkkuihin

      Kesä ja juhannus on grillailun kulta-aikaa. Mitä teillä grillataan juhannuksena? Anna oma vinkkisi grilliherkkuihin. Ka
      Grillaus
      38
      842
    3. Minkä haluaisit

      Nähdä kaivatultasi
      Ikävä
      100
      819
    4. Taas puukotus yläristillä!

      Tänään taas puukotettu hengiltä ihminen Kuopiontien läheisyydessä yläristillä! Nyt näitä alkaa olla viikoittain!
      Pieksämäki
      34
      728
    5. Ihana juhannusperinne

      Lähdemme aina juhannuksena aivan hirveässä kännissä kiikkerällä veneellä pieliselle! Se on hauskaa ja jännittävää puuhaa
      Lieksa
      43
      678
    6. Älä itke rakas.

      Tunnen sun kyyneleet silmissäni. Kaikki tulee menemään hyvin. Loppu häämöttää jo...
      Ikävä
      56
      668
    7. Mistä tunnistaa suomussalmelaisen kassajonossa

      Terveiset täältä Kuopiosta! Olen aikoinaan Suomussalmelta lähtenyt maailmalle ja muutaman mutkan kautta päätynyt savon s
      Suomussalmi
      52
      559
    8. On ikävä sua

      Muru.
      Ikävä
      32
      550
    9. Olen päättänyt tappaa itseni tämän vuoden puolella

      Minulla ei ole oikeastaan mitään hävittävää. Elämäni on surkeaa ja tunnen ihmisten tuijotukset ja supinat. Ne nauravat r
      Ikävä
      52
      463
    10. Olet hurmaava

      Olet paras mies, joka on tullut vastaan. Sinussa on jotakin, mitä muissa ei ole. En vaan tiedä, mikä on oikein sinun su
      Ikävä
      14
      461
    Aihe