Avatar billede kernelx Juniormester
13. december 2006 - 00:25 Der er 5 kommentarer og
1 løsning

fejl i cpp

hi, jeg har følgende kode:
---
class test
{
    private:

    public:
        test&  operator=(test& test2);
        test  testing1(unsigned int x, unsigned char y);
        test  testing2(unsigned char y);
};

test test::testing1(unsigned int x, unsigned char y)
{
    test tmp;

    return tmp;
}

test test::testing2(unsigned char y)
{
    test tmp;

    tmp = this->testing1(1, y);

    return tmp;
}


test& test::operator=(test& test2)
{
    return (*this);
}


int main ()
{

}
---

mit problem er, at den kommer med følgende fejl:
tmp.cpp: In member function »test test::testing2(unsigned char)«:
tmp.cpp:22: Error: no match for »operator=« in »tmp = ((test*)this)->test::testing1(1u, ((int)y))«
tmp.cpp:6: Bemerkning: Kandidater er: test& test::operator=(test&)

problemet er følgene linie i koden:
tmp = this->testing1(1, y);

hvad er der galt med den? testing1() burde give en "test"-verdi som return

jeg kan ikke finde fejlen


med venlig hilsen
KernelX
Avatar billede bertelbrander Novice
13. december 2006 - 00:32 #1
Lav parametren til = operatoren const:
        test&  operator=(const test& test2);
Avatar billede kernelx Juniormester
13. december 2006 - 00:40 #2
ok, det vil løse problemet her. men så følger der et andet problem. hvis jeg bruger const - så
må jeg ikke bruge class-funktioner fra test2 i operator=()

---
class test
{
    private:
        void  bla(void);

    public:
        test&  operator=(const test& test2);
        test  testing1(unsigned int x, unsigned char y);
        test  testing2(unsigned char y);
};

void test::bla()
{
    return;
}

test test::testing1(unsigned int x, unsigned char y)
{
    test tmp;

    return tmp;
}

test test::testing2(unsigned char y)
{
    test tmp;

    tmp = this->testing1(1, y);

    return tmp;
}


test& test::operator=(const test& test2)
{
    test2.bla();
    return (*this);
}


int main ()
{

}
---

jeg må ikke bruge test2.bla() i operator=().
findes der en mulighed der bevirker at test2.bla() alligevel virker indenfor operator=()?
Avatar billede bertelbrander Novice
13. december 2006 - 00:43 #3
Du kan lave bla const:
void  bla(void) const;

bla() kan så ikke uden videre modificere objektet, men man forventer normalt heller ikke at en = operator modificerer højresiden.
Avatar billede kernelx Juniormester
13. december 2006 - 00:49 #4
mange tak!!!
det virker!!!

husk at skrive et eller andet som svar - pga. points
Avatar billede bertelbrander Novice
13. december 2006 - 00:50 #5
Jeg samler ikke på point.
Avatar billede kernelx Juniormester
14. december 2006 - 17:53 #6
ok - men tak alligevel!
(lukket)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester