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

1142

    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. Theermannilla kulkee!

      Vouti vie kaiken mikä mieheltä irti lähtee ja palstan naiset syyttävät tilanteesta kilpaa eri naisia. Miehellä on elämän
      Kotimaiset julkkisjuorut
      131
      7789
    2. Näin unta viime yönä

      Että tulit nainen istumaan syliini minihame päällä.
      Ikävä
      55
      5798
    3. Esivaihdevuodet, menopaussi

      https://www.pihlajalinna.fi/palvelut/yksityisasiakkaat/terveys/esivaihdevuodet-eli-premenopaussi Täällä kun puhutaan pa
      Sinkut
      80
      3283
    4. Tänään taas tuli pari-kolme juttua

      Jotka niin mielelläni jakaisin sun kanssa. Niin paljon elämää jaettavana ja niin selkeä paikka sinulle. Mutta ymmärrän
      Tunteet
      7
      2923
    5. Kuhmo tekisi perässä

      Lomauttakaa kaupungin talolta turhat lattiankuluttajat pois, kuten naapuripitäjä
      Kuhmo
      10
      1678
    6. Suomi julkaisi varautumisoppaan

      Että sellanen tappaus. Kun kriisitilanne iskee, niin on mentävä nettiin ja luettava ohjeet suomi.fi -sivuilta. Onkohan j
      Maailman menoa
      209
      1620
    7. Miksi putin ei valinnut ensimmäiseksi kohteekseen Suomea?

      Olisiko ollut sittenkin helpompi kohde?
      Maailman menoa
      332
      1335
    8. Ukraina sai luvan vastata ohjuksin Venäjän lueelle

      Mediatietojen mukaan Yhdysvallat on antanut Ukrainalle luvan iskeä pitkän kantaman ohjuksilla Venäjälle. Ylen kirjeenvai
      NATO
      335
      1182
    9. Olen jälleen pahoillani

      Harjoittamastani henkisestä väkivallasta palstan välityksellä. Kyllä ne voi vaikuttaa jotenkin mieleen, vaikka ei itsell
      Ikävä
      93
      1169
    10. Oot vaan niin hellä

      Ja lämmin luonteeltasi, että rakastan sitä yli kaiken. Oot ehkä tietämättäsi auttanut mua todella paljon. Auttaisit tämä
      Ikävä
      32
      1071
    Aihe