Yazılım | Programlama c++ c2440 ,c2064 ,c2259 hatasını nasıl çözebilirim

Poyralljack

Yeni üye
1 Eki 2019
27
0
#include<iostream>
using namespace std;
class Shape;
class DispWindow;
class Point;
class Rectangle;
class Shape
{
public:
Shape();
~Shape();
virtual **** draw(DispWindow& w)=0 ;//kesinlikle böyle olucak
};
class DispWindow:public Shape
{
public:
DispWindow(int, int);
DispWindow(const DispWindow&);
DispWindow(Rectangle&);
~DispWindow();
Point current();
**** show();

**** draw(DispWindow&);
private:
int row, column;
char** p;
};
class Rectangle:public Shape
{
public:
Rectangle(Point&, Point&);
Rectangle(const Rectangle&);
**** setleftcorner(Point);
**** setrigtcorner(Point);
Point getleftcorner();
Point getrightcorner();


private:
Point *leftcorner;
Point *rightcorner;
};
class Point
{
public:
Point();
Point(int,int);
int getx()const;
int gety()const;
**** setx(int);
**** sety(int);
Point right(int);
Point down(int);

private:
int x;
int y;
};
**** drawRectangles()
{
DispWindow Wind(50, 50);


for (int i = 0; i < 10; i++)
Wind.draw(Rectangle(Wind.current(), Wind.current().right(10).down(10)));

Wind.show();
}



int main()
{
//drawDots();

// uncomment the following lines in order to test your program

drawRectangles();
// drawLines();
// drawHome();
}
yazdığım bu kodda visual studioda c2440 ve c2064 c2259 hatası veriyor.
Bu hatayı nasıl çözebilirim.
 

Poyralljack

Yeni üye
1 Eki 2019
27
0
// deneme.cpp : Bu dosya 'main' işlevi içeriyor. Program yürütme orada başlayıp biter.
//

#include <iostream>
using namespace std;
class DispWindow;
class Shape;
class Point;
class Rectangle;
class Shape
{
public:
virtual **** draw(DispWindow &w)=0;
};
class Point
{
public:
int x;
int y;
Point()
{
x = 0;
y = 0;
}
Point(int a, int b)
{
x = a;
y = b;
}
};
class DispWindow
{

public:
char** p;
int row;
int column;

DispWindow(int a, int b)
{
row = a;
column = b;
p = new char* [a];
for (int i = 0;i < row;i++)
p = new char;
cout << "Constructor DispWindow" << endl;
for (int i = 0;i < row;i++)
{
for (int j = 0;j < column;j++)
{
p[j] = 'a';
}

}

}

**** show()
{
for (int i = 0;i < row;i++)
{
for (int j = 0;j < column;j++)
{
cout<<p[j];
}
cout << endl;
}
}
**** draw(Rectangle &a1)
{
a1.leftcornergetx;//c2027 tanımsız 'Rectangle' türü kullanıldı diyor
}
};
class Rectangle:public Shape
{
public:
Point* leftcorner;
Point* rightcorner;
int a;
Rectangle()
{
leftcorner->x = 0;
leftcorner->y = 0;
rightcorner->x = 0;
rightcorner->y = 0;
a = 0;
}
Rectangle(Point a1, Point a2)
{
leftcorner =&a1;
rightcorner =&a2;
a = 0;

}
**** draw(DispWindow &w)
{

}


int leftcornergetx()const
{
return leftcorner->x;
}
int leftcornergety()const
{
return leftcorner->y;
}
int rightcornergetx()const
{
return rightcorner->x;
}
int rightcornergety()const
{
return rightcorner->y;
}
**** setleftcornersetx(int a)
{
leftcorner->x = a;
}
**** setleftcornersety(int b)
{
leftcorner->y = b;
}
**** setrightcornersetx(int a)
{
rightcorner->x = a;
}
**** setrightcornersety(int b)
{
rightcorner->y = b;
}

};

int main()
{
DispWindow Wind(100, 100);

// front wall
Rectangle r1(Point(20, 40), Point(80, 80));
Wind.draw(r1);
Wind.show();
}

Kodu biraz çevirdim ve // yazan yerde c2027 hatası var bu sefer eğer DispWindow classından Rectangle classındaki herhangi bir metoda veya fonksiyona ulaşmaya çalışınca kod c2027 hatsı veriyor ama sade kullanılırsa hata vermiyor. Ama amacım DispWindow classından Rectangle classına ulaşmam gerekiyor bu konuda bir şey söyleyebilir misin
 

zztri

Yaşayan Forum Efsanesi
9 Tem 2015
10,053
389
Ankara
Üstad "forward declaration", yani önceden bildirim yapman gerekir. Yani bu DispWindow class'ı Rectangle class'ını kullanıyor, ama daha tanımlanmamış değil mi? Doğal olarak hata veriyor.

class DispWindow demeden hemen önce class Rectangle; deyiverirsin. Böylece compiler der ki "Haa.. Rectangle diye bir class eninde sonunda tanımlanacakmış. Ben hata vermeyeyim. Adam zamanı gelince tanımlar, tanımlamazsa "incomplete class" derim zaten."
 

Poyralljack

Yeni üye
1 Eki 2019
27
0
Zaten forward declarationa yaptım hala DispWindow classından Rectangle classındaki herhangi bir şeye ulaşamıyorum . Bu hatayı kod yazarak tekrar yazabilir misiniz.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.