PDA

Tam Sürümünü Görmek İçin : C++ fonksiyon hatası


choldax
06/02/2008, 21:46
#include <iostream>
using namespace std;


class Coordinates
{
public:
int x,y;
};
class Star
{
public:
void MoveRight();
void MoveLeft();
void MoveUp();
void MoveDown();
private:
void PrintInfo();
};

class Area
{
public:
int height,width;
Coordinates star;
char **frame;
void CreateFrame(Area);
void PrintFrame(Area);

};



void Area::CreateFrame(Area alan)
{
int h,w,i;
alan.frame = new char*[alan.height];

for(i=0; i!=alan.width; i++)
alan.frame[i] = new char[alan.width];

for(h=0; h<alan.height; h++)
{
for(w=0; w<alan.width; w++)
{
alan.frame[h][w] = ' ';
}
}
cout<<"Mallocation\n";
for(i=0; i<alan.width; i++)
{
alan.frame[0][i] = '*';
alan.frame[alan.height-1][i] = '*';
}
for(i=0; i<alan.height; i++)
{
alan.frame[i][0] = '*';
alan.frame[i][alan.width-1] = '*';
}
cout<<"Frame\n";

alan.star.x = alan.height/2;
alan.star.y = alan.width/2;

alan.frame[alan.star.x][alan.star.y] = '*';

cout<<"Frame CREATED!\n";
}

void Area::PrintFrame(Area alan)
{
int h,w;
cout<<"Printing...\n";
for(h=0; h<alan.height-1; h++)
{
for(w=0; w<alan.width-1; w++)
{
cout<<"1\n";
cout<<alan.frame[h][w];
cout<<"2\n";
}
cout<<endl;
}
cout<<"Mrinting\n";
}

void Star::MoveRight()
{
cout<<"void Star::MoveRight()"<<endl;
}

void Star::MoveLeft()
{
cout<<"void Star::MoveLeft()"<<endl;
}

void Star::MoveUp()
{
cout<<"void Star::MoveUp()"<<endl;
}

void Star::MoveDown()
{
cout<<"void Star::MoveDown()"<<endl;
}
int main()
{
Area myarea;
myarea.height = 10;
cout<<"Area height\n";
myarea.width = 10;
cout<<"Area width\n";

myarea.CreateFrame(myarea);
myarea.PrintFrame(myarea);

return 0;
}



PrintArea fonksiyonunda döngünün içine giriyor ama ilk karakteri basmadan program patlıyor. Ancak fonksiyonun içeriğini CreateArea içine kopyaladığımda istediğim şeyi basıyor.

Yardımlarınızı bekliyorum.
Saygılar


hgedek
06/02/2008, 22:19
void CreateFrame(Area);
fonksiyonu Area nesnesinin kopyasını alır.Ve oluşturduğun Frame geri gelince
silinir.Dolayısıyla Frame oluşmaz.
(Area &) almalısın yada (Area *) almalısın.

choldax
06/02/2008, 22:49
veya return Area demeliyim sanırım :)
teşekkürler

choldax
06/02/2008, 23:54
kodu biraz değiştirdim ve şimdi de karşıma bu hata çıkyor Star:: içindeki tüm fonksiyonlar için

star.cpp:14: error: variable or field `MoveRight' declared void
star.cpp:14: error: expected `;' before '(' token

acehreli
07/02/2008, 00:05
Bir yerde bir noktali virgul eksik veya fazla gibi bir yazim hatasi...

Ali

choldax
07/02/2008, 10:07
class Star
{
public:
void MoveRight(Area *);
void MoveLeft(Area *);
void MoveUp(Area *);
void MoveDown(Area *);
};

acehreli
07/02/2008, 10:13
Gostermedigin yerde bir yazim hatasi var. :) Kodun tamamini aciklama bloklari (/* ... */) icine al, derlendigini gor. Ondan sonra yavas yavas kod bolumlerini derlemeye ekle. Hangi satirlarda bir gariplik oldugunu bulabilirsin.

Ali

choldax
07/02/2008, 13:40
hata satırlarını bu dört satır olarak gösteriyor compiler. ama yine de dediğini yapacağım. Teşekkürler

choldax
07/02/2008, 17:06
dediğini yaptım ancak program sadece o 4 satır açık kalmasına rağmen aynı hatayı veriyor.

acehreli
07/02/2008, 22:02
Netten ogrendigime gore, belki de Area'yi Star'dan sonra tanimliyorsundur. (?) Derleyicinin Area'yi Star'in tanimindan once bilmesi gerekiyor tabii...

Ali

choldax
08/02/2008, 00:28
sorunum çözüldü çok teşekkürler :)

acehreli
08/02/2008, 01:20
Yani sorun tanim siralamasinda miymis?

Ali

choldax
08/02/2008, 21:51
evet. ve malesef bunu minGW ile çözemedim. Visual studio'nun hata mesajları yardımıyla çözebildim