Tam Sürümünü Görmek İçin : hata nerede?
#include<iostream>
using namespace std;
class area_cl{
private:
double height,width;
public:
area_cl(double a, double b){
height=a;
width=b;
}
~area_cl(){
}
};
class Rectangle:public area_cl {
public:
int dummy;
Rectangle(double,double,int);
~Rectangle();
double area();
};
Rectangle::Rectangle(double a, double b,int dum):width(a),height(b)
{
dummy=dum;
}
Rectangle::~Rectangle( )
{
}
double Rectangle::area( )
{
return width*height;
}
int main()
{
Rectangle rec(12,5,10);
cout<<rec.area()<<endl;
return 0;
}
acehreli
22/09/2005, 21:45
1) Rectangle kurucusunda area_cl'in ozel nesnelerine erisiyorsun
2) Rectangle kurucusunda width ve height nesnelerini sanki onun oge nesneleriymis gibi ilkdeger listesinde "kurmaya" calisiyorsun. Halbuki o nesneler Rectangle'in ilkdeger listesine gelindiginde area_cl kurucusu tarafindan kurulmuslardir bile.
Sanirim soyle bir sey yapmak istiyorsun:
Rectangle::Rectangle(double a, double b,int dum)
:
area_cl(a, b)
{
dummy=dum;
}
Ali
area_cl classindan Rectangle classini turetmek istiyorum. Rectangle classinda area( ) adinda bir method olacak. hatalarim azaldi. kodun son hali :
#include<iostream>
using namespace std;
class area_cl{
private:
double height,width;
public:
area_cl(double a, double b){
height=a;
width=b;
}
~area_cl(){
}
};
class Rectangle:public area_cl {
public:
int dummy;
// Rectangle(double,double,int);
Rectangle(double a, double b,int dum):area_cl(a,b) /* :width(a),height(b) */
{
dummy=dum;
}
~Rectangle();
double area();
};
/* Rectangle::Rectangle(double a, double b,int dum):width(a),height(b)
{
dummy=dum;
}
Rectangle::~Rectangle( )
{
}
*/
double Rectangle::area( )
{
return width*height;
}
int main()
{
Rectangle rec(12,5,10);
cout<<rec.area()<<endl;
return 0;
}
acehreli
23/09/2005, 19:06
Yani o kodu derlemeye calisiyorsun ama derlenmiyor ve sen de nedenini mi ogrenmek istiyorsun... Derleyici kodu derleyemedigini soyledigi zaman bunun nedenini de verir. Zamanla hata mesajlarina alisiliyor...
Senin kodunu g++ ile derledigimde aldigim hata su:
deneme.cpp:5: error: `double area_cl::width' is private
deneme.cpp:42: error: within this context
Hata mesaji iki satira bolunmus ama Turkce'de su anlama geliyor:
deneme.cpp'nin 5'inci satirinda: hata: `double area_cl::width' ozeldir
deneme.cpp'nin 42'inci satirinda: hata: iste tam burada
C++'ta ozel (private) erisime sahip ogelere yalnizca o sinifin islevleri tarafindan erisilebilir. Senin hatan, Rectangle adli bir siniftan area_cl adli baska bir sinifin ogelerine erismeye calisman. Dilin kurallari geregi bunu yapamazsin.
Rectangle::area'yi hatadan kurtulmak icin gecici olarak soyle degistirdim:
double Rectangle::area( )
{
return 0;
}
Sen de oyle yaparsan, yeni bir hata mesajiyla karsilasacaksin. O da sana Rectangle::~Rectangle islevinin bildirildigi ama taniminin verilmedigi anlamina gelen bir sey soyleyecek.
Programinin gereklerini bilmiyorum ama genislik ve yukseklik (width ve height) ogelerini area_cl sinifinda tanimlaman da herhalde yanlis oluyor. Cunku ornegin daireyi tanimlayan bir sinif yaptiginda onun da oyle ogelere sahip olmalari dogru olmaz herhalde.
Son olarak, kuramsal islevleri (virtual member functions) ogrendiniz mi? Sanki area islevini area_cl sinifinda saf kuramsal (pure virtual) olarak bildirmek; Rectangle sinifinda ise tanimlamak istiyorsun gibi geliyor.
Ali
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.