dodání ihned! nové
Pouze tento týden sleva až 80 % na e-learning týkající se PHP. Zároveň využij akce až 30 % zdarma při nákupu e-learningu. Více informací.
Hledáme programátora do rostoucího týmu ITnetwork.cz, 100% home office, 100% flexibilní pracovní doba. Více informací
discount week 30
Avatar
petr.dar
Člen
Avatar
petr.dar:25.2.2017 22:01

Ahoj lidi,
Nevěděli byjste, proč mi tento kód hází chybu, že operator == chce jen jeden argument?

#include <iostream>
using namespace std;
struct my_struct
{
    int X;
    int Y;
    friend bool operator ==(const my_struct &X, const my_struct &Y);
};


int main()
{
    my_struct first;
    my_struct second;
    if (first == second)
    {

    }
    return 0;
}

bool my_struct::operator ==(const my_struct &X, const my_struct &Y)
{
    return (X.X == X.Y && Y.X == Y.Y);
}
 
Odpovědět
25.2.2017 22:01
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na petr.dar
Martin Dráb:25.2.2017 22:12

Myslím, že jelikož jsi operátor definoval jako metodu struktury my_struct, tak se očekává, že operátor bude porovnávat zadaný objekt s this, takže pak by měla být deklarace operátoru jen s jedním parametrem:

bool my_struct::operator ==(const my_struct &X)
{
    return (this->X == X.X && this->Y == X.Y);
}

(upravil jsem jeho implementaci ,protože si nejsem jistý, zda-li ta tvoje opravdu dělá to, co chceš).

Pokud bys chtěl dvouargumentovou variantu operátoru, deklaruj jej jako globální funkci mimo strukturu my_struct.

Nahoru Odpovědět
25.2.2017 22:12
2 + 2 = 5 for extremely large values of 2
Avatar
petr.dar
Člen
Avatar
petr.dar:25.2.2017 22:26

potřebuji právě tu dvouargumentovou variantu operátoru, globální deklarace nic nezmění ...

 
Nahoru Odpovědět
25.2.2017 22:26
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
petr.dar
Člen
Avatar
petr.dar:25.2.2017 22:41

No vlastně, v tomto případě mi to pomohlo, ale kdybych potřeboval např ve třídě použít jiný operátor který má rozdílné parametry, budu muset použít přátelskou.

 
Nahoru Odpovědět
25.2.2017 22:41
Avatar
Matej
Člen
Avatar
Odpovídá na petr.dar
Matej:26.2.2017 3:10

Zmen

bool my_struct::operator ==(const my_struct &X, const my_struct &Y)
{
    return (X.X == X.Y && Y.X == Y.Y);
}

za

bool operator ==(const my_struct &X, const my_struct &Y)
{
    return (X.X == X.Y && Y.X == Y.Y);
}
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět
26.2.2017 3:10
Avatar
petr.dar
Člen
Avatar
Odpovídá na Matej
petr.dar:26.2.2017 8:21

Super, přesně tohle jsem potřeboval :-)

 
Nahoru Odpovědět
26.2.2017 8:21
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.