Tam Sürümünü Görmek İçin : delete []
ankakusu
19/11/2007, 13:32
Merhaba ben bu alttaki kodu
calistiriyorum ama bir hata aliyorum.
Nedenini cozemedim.
yardimci olur musunuz?
class::class(const int var1,const int var2,const int *var3,
const int *var4,const int var5)
:v1(var1),v2(var2),v5(var5)
{
v3 = new int [var5];
v4 = new int [var5];
v3 = var3;
v4 = var4;
}
class::~class()
{
delete [] var3;
delete [] var4;
}hatası
--------------------Configuration: class - Win32 Debug--------------------
Compiling...
class.cpp
error C2664: 'delete' : cannot convert parameter 1 from 'const int *' to 'void *'
Conversion loses qualifiers
error C2664: 'delete' : cannot convert parameter 1 from 'const int *' to 'void *'
Conversion loses qualifiers
Error executing cl.exe.
class.exe - 2 error(s), 0 warning(s)
Derleyici verdiği hata mesajında const bir parametreyi const'luğu kaybolacağı için dönüştüremediğini belirtiyor. (C++'ta const bir niteleyici (qualifier) olarak geçer) Sınıf bildiriminizi göndermemişsiniz. Bildirimdeki attribute'lerin const'luklarını kontrol edebilirsiniz.
İlaveten;
class::class(const i....
Sınıfın ismini class mı koydunuz ? class sözcüğü bir anahtar sözcük ve bir isim (identifier) olarak kullanılamaz.
Örn:
class MyClass {
public:
MyClass(); // Varsayılan Constructor
}
MyClass::MyClass()
{
//......
}
olmalı.
İyi çalışmalar.
acehreli
19/11/2007, 19:01
1) Kodun bu kadarindan anlasildigina gore, neyi new[] yaptiysan onu delete[] yapacaksin. O yuzden delete[] v3 ve v4 yapmak istiyorsun herhalde.
2) v3 ve v4'u new[] yaptiktan sonra v3'te ve v4'te bulunan o cok onemli bilgiyi (yani new[]'un ne dOndUrdugunu) v3 ve v4'e tekrar deger atayarak kaybediyorsun:
v3 = new int [var5];
v3 = var3; // <-- Bellek sizintisi; new[]'un dOndUrdugu degeri kaybettik
Ali
ankakusu
21/11/2007, 09:23
Hmm anladım. Şöyle yapsam daha iyi olur yani:
ama şimdi de constant deger oldugu icin hata veriyor...
Myclass::Myclass(const int var1,const int var2,const int &var3,
const int &var4,const int var5)
:v1(var1),v2(var2),v5(var5)
{
v3 = new int [var5];
v4 = new int [var5];
for (int i=0;i<var5;i++)
{
v3[i] = (&var3)[i];
v4[i] = (&var4)[i];
}
}
Myclass::~Myclass()
{
delete [] var3;
delete [] var4;
}
Compiling...
Myclass.cpp
error C2166: l-value specifies const object
error C2166: l-value specifies const object
error C2664: 'delete' : cannot convert parameter 1 from 'const int *' to 'void *'
Conversion loses qualifiers
error C2664: 'delete' : cannot convert parameter 1 from 'const int *' to 'void *'
Conversion loses qualifiers
Error executing cl.exe.
Myclass.exe - 4 error(s), 0 warning(s)
acehreli
21/11/2007, 20:10
var3 ve var4'u dizi olarak kullandigina gore, onlari alisildik sekilde isaretci olarak gondermen cok iyi olur:
Myclass(const int var1,const int var2,const int * var3,
const int * var4,const int var5);
Ali
Not: Bunu giderdikten sonra, daha once soyledigim gibi delete[] var3;'de de hata alacaksin.
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.