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.