PDA

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)


depones
19/11/2007, 18:56
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.