Tam Sürümünü Görmek İçin : Borland C++ Builder Dinamik Dizi Yardım!!
Arkadaşlar Borland C++ Builder da bir object dizisi yapmak istiyorum ve bunun boyutunu run-time da belirlemek istiyorum. Şöyle yaptığımda hata veriyor
int k =50;
TImage* resimler;
resimler =new TImage[k];
Hata: E2248 Cannot find default constructor to initialize array element of type 'TImage'
Ama aynı işlemi bir double tipi üzerinde yaptığımda hata vermiyor. Yardımcı olursanız sevinirim.
acehreli
19/04/2005, 21:13
O hatanin Turkcesi su: TImage'in varsayilan kurucusu yok.
new[] isleci her bir nesneyi varsayilan kurucusu (default constructor) ile kurar. Onun icin, varsayilan kurucusu olmayan tUrleri new[] ile kullanamazsin. (Aslinda vector, list, vs. ile de kullanamazsin.)
Yapabilecegin bir sey, TImage yerine TImage* kullanmak olabilir:
TImage ** resimler = new TImage*[k];
Ondan sonra,
resimler[0] = new TASImage(/* ... */);
resimler[1] = new TAttImage(/* ... */);
// vs.
Ama bu yontem yalin isaretciler kullandigi icin, olasi bir hata (exception) atildiginda kaynak kaybina yol acar. Ayrica, vector dururken new[] kullanmaya da hemen hemen hicbir zaman gerek olmaz.
Cok daha iyi bir cozum su olabilir:
#include <boost/shared_ptr.hpp> // boost.org'dan indirin
/* ... */
typedef boost::shared_ptr<TImage> TImageIsaretci;
typedef std::vector<TImageIsaretci> TImageToplulugu;
/* ... */
TImageToplulugu imageToplulugu;
for (int i = 0; i != toplamTImage; ++i)
{
imageToplulugu.push_back(TImageIsaretci(new TAttImage(/* ... */)));
}
/* ... */
imageToplulugu[0]->DrawBox(/* ... */);
Super! Ne delete[] yapmak gerekecek ne baska bir sey. Kaynak sizintisi filan yok...
Gercekten, std::vector varken new[] kullanmaya gerek yok.
Ali
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.