Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ongelma luokkien kanssa (virtuaalifunktiot)

ByteMan [07.03.2008 20:50:05]

#

eli yritän siis opetella loputkin asiat mitä en c++:sta tiedä(abstraktit luokat ja STL pääasiassa)
nyt kun yritin virtuaalifunktiota kokeilla, kääntäjä iski tällasta:

request for member `getX' in `testi', which is of non-class type `ukko ()()'

saman iskee kaikille muillekkin funktioille, paitsi muodostimelle

luokan koodi näyttää tältä:

class otus{//abstrakti käyttöliittymäluokka
	public:
		virtual int getX() = 0;
		virtual int getY() = 0;
		virtual void setX(int) = 0;
		virtual void setY(int) = 0;
};

//ukko luokka

class ukko : public otus{
	private:
		int x;
		int y;
	public:
		ukko();
		int getX();
		int getY();
		void setX(int a);
		void setY(int b);
};

ukko::ukko(){
	x = 0;
	y = 0;
}

int ukko::getX(){
	return x;
}

int ukko::getY(){
	return y;
}

void ukko::setX(int a){
	x = a;
}

void ukko::setY(int b){
	y = b;
}

Metabolix [07.03.2008 21:00:54]

#

Ei kai se nyt sitä tuossa koodissa valita vaan jossain muualla. Anna mieluummin se rivi, jolla tuo virhe tulee.

Ei muuten ole järkevää laittaa virtuaalifunktioiksi tuollaisia perusasioita kuin GetX ja GetY, vaan ennemmin kannattaa jo siihen perusluokkaan ohjelmoida välttämättömät ominaisuudet kuten sijainti.

Virtuaalisia funktioita sisältäville luokille on ehdottomasti syytä määritellä myös virtuaalinen tuhoaja (destructor, ~luokka), ettei tapahdu kummia.

ByteMan [07.03.2008 21:03:15]

#

cout<<endl<<"ukko sijaitsee at point ("<<testi.getX()<<","<<testi.getY()<<")\n";

Metabolix [07.03.2008 21:04:28]

#

No miten tuo "testi" on luotu?

ByteMan [07.03.2008 21:13:36]

#

no just..

ukko testi();

eli aivan päin mäntyä..
ja tietenkin se oli se kaikista selvin asia mitä en sitte huomannu..
kiitoksia kuitenkin, toi vika kysymys täräytti oikean vastauksen aika tehokkaasti.. en olis muute varmaa huomannu kattoo ;)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta