Tässä jonkin tovin pohdittuani ongelmaani en enää keksi mistä tämä voisi johtua.
Virheeksi saan:
error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const Kuvio' (or there is no acceptable conversion)
void Piirustus::lisaaKuvio(const char* nimi, Piste paikka) const { int i; for(i=0;i<10;i++) { if(nimi == "") { kuviot[i] = Kuvio(nimi,paikka); } break; } }
constin kanssahan tässä on jokin mutta kun ei tajua niin ei tajua :)
1. Merkkijonoja ei voi vertailla ==:lla. Käytä sen sijaan sunktiota strcmp().
2. Mitä muuttujatyypiä on taulukko kuviot? Entä minkä muuttujatyypin palauttaa funktio Kuvio()?
No tässä voisi selittää, että onko kielenä C vai C++.
Megant kirjoitti:
No tässä voisi selittää, että onko kielenä C vai C++.
const
funktion kuvauksen jälkeen kertoo, että C++. Kuten myös nimiavaruudessa oleva funktio.
EDIT: Ja se saattaa olla ongelman syykin. const
-funktio ei saa muuttaa kuviot-taulukkoa.
Kielenä C++.
kuviot taulukon tyyppi on Kuvio. Varmaan selventää enemmän kun laitan näitä koodeja.
Piirustus.h
class Piirustus { private: public: Kuvio kuviot[10]; Piirustus(); ~Piirustus(void); void paivita() const; void lisaaKuvio(const char* nimi, const Piste paikka) const; void poistaKuvio(const int poistaKuvio) const; };
Kuvio.h
class Kuvio { private: char nimi[50]; Piste paikka; public: Kuvio(const char* nimi="", const Piste& paikka=Piste()); ~Kuvio(void); // getterit ja setterit nimi-kentälle: void setNimi(const char* uusi){strcpy(this->nimi,uusi);} const char* getNimi() const {return this->nimi;} // getterit ja setterit paikka-kentälle: void setPaikka(const Piste& uusi){this->paikka=uusi;} const Piste& getPaikka() const {return this->paikka;} // Kuvion piirtäminen: void piirra() const; };
Korvaappa nimen charritaulu std::stringillä (std::string nimi; Tarvitset #include <string>) niin vertailu hoituu tuolla if (nimi == "")-ehdolla. Stringit ovat muutenkin käteviä, eikä tarvitse käyttää osoittimia.
Sinun pitää overloadata = -operaattori luokalle 'kuvio'.
vaihda kohta
kuviot[i] = Kuvio(nimi,paikka);
muotoon
kuviot[i] = new Kuvio(nimi,paikka);
Aihe on jo aika vanha, joten et voi enää vastata siihen.