fizban Mesaj tarihi: Temmuz 12, 2009 Paylaş Mesaj tarihi: Temmuz 12, 2009 yetkilerimi kötüye kullanıp siliyorum yazdığım herşeyi yeni bir soru var çünkü :P iki sorum var. 1. assignment diyor ki; struct ta değişkenin tipi "char *" olsun. onu initialize eden fonksiyon "const char *" olsun. strcpy() hata verdi.. nasıl yapabilirim ? 2. overloaded functions, VE default parameters kullanın diyor. fakat, fonksiyonun değişkenleri (const char* a, const char* b, string c) b ve c'nin default parametreleri olsun deniyor. ve fonksiyon 4 sekilde cagirilabilir. i. fonksiyon(a, b, c) ii. fonksiyon(a) iii. fonksiyon(a, b); iv. fonksiyon (a, c); nasıl yapabilirim, bilemedim. yardım plox. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
fizban Mesaj tarihi: Temmuz 12, 2009 Konuyu açan Paylaş Mesaj tarihi: Temmuz 12, 2009 isimleri fala ndeğiştirdim, orada sorun çıkablir, onu boşverin. sorunum şurada diyebilirim genel oalrak; "an array of pointers to struct Meh" 'i fonksiyona yolladığım zaman addresini yanlış alıyor, örneğin printMeh'e yolladığımda.. napacam yahu Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
fizban Mesaj tarihi: Temmuz 12, 2009 Konuyu açan Paylaş Mesaj tarihi: Temmuz 12, 2009 ya bu arada şöyle yapınca çözüldü de, yapmak doğru mudur ? global fonksiyon tanımladım (tek dosya var sonuçta) static struct Book** bookArray; bitti. yalnız bir sorum daha var. kendi kodum yukarıda da, expand nasıl ederim arrayleri ? siz nasıl yapıyorsunuz ? delete yapamıyorum çünkü, düdük gibi kalıyorum öyle. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
fizban Mesaj tarihi: Temmuz 12, 2009 Konuyu açan Paylaş Mesaj tarihi: Temmuz 12, 2009 bir soru daha, string dururken niye char* kullanılır ? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Temmuz 12, 2009 Paylaş Mesaj tarihi: Temmuz 12, 2009 Birinci sorunu pek anlayamadım. İkinci soruyu iki fonksiyon yazarak çözebilirsin. İlk fonksiyon f(a,b,c) şeklinde olacak. b ve c parametrelerine default değer vereceksin. Yani f(a), f(a,b) ve f(a,b,c) diye çağrılabilecek. İkinci fonksiyonu ise f(a,c) diye tanımlayacaksın (f ismi daha önce kullanılmış olduğu için overloading oluyor). Şekilde 1a: #include <stdio.h> #include <iostream> #include <string> using namespace std; void f(const char* a, const char* b = "b", string c = *new string("c")) { cout << a << b << c << endl; } void f(const char* a, string c) { cout << a << c; } int main() { f("hello"); f("hello", "world"); f("hello", "mello", *new string("cello")); f("hello", *new string("fizban")); return 0; } Üçüncü soruna gelince... c'den kalma bir alışkanlık diyelim. String çok daha düzenli ve anlaşılabilir bir yapı. Çekinme kullan. :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
fizban Mesaj tarihi: Temmuz 12, 2009 Konuyu açan Paylaş Mesaj tarihi: Temmuz 12, 2009 sağol mirage öncelikle cevap icin. 1. soruyu yeniden sorayım şöyle, assignment diyor ki struct şu tip olsun struct mtruct { char *a; char *b; string c; } fakat onu init eden fonksiyonda değişken tipi const char* olsun. fonksiyonumben (const char* a, const char *b, string c) { --> buraya işte strcpy(mtruct-> a, a) koydum fakat strcpy hata veriyor, nedendir ? } Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
fizban Mesaj tarihi: Temmuz 12, 2009 Konuyu açan Paylaş Mesaj tarihi: Temmuz 12, 2009 2. sorunun cevabına gelince, tabi aptallık bende, overloaded function koyduktan sonra default parametre niye koyarsın ki hala eksik parametre varken.. dimi. demin yazdığım sorunu şöyle çözdüm f(a,b,c) b ve c default parametrelerle f(a,c,b) c ve b default parametrelerle.. 3. sorum da zaten şey şeklindeydi. neden bir assignment'ta zorla "const char* kullan" denilir ki ? string gibi MÜK-KEM-MEL bir tip varken.. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Temmuz 12, 2009 Paylaş Mesaj tarihi: Temmuz 12, 2009 char *a = "fizboz"; dediğin zaman sadece pointer tanımlamıyorsun, compiler kardiş gidiyor otomatik olarak hafızadan senin için "fizboz" string'i için yer ayırıyor. struct mtruct { char *a; char *b; string c; } Şu yukardaki struct tanımında yaptığın gibi sadece "char *a" dersen sadece pointer tanımlamış oluyorsun. String için herhangi bir yer ayırmıyorsun. Sonra strcopy ile bu struct içindeki a değişkenine bir string kopyalamaya çalışıyorsun. Ama a pointer'ı hafızada rastgele bir yeri gösteriyor. Böylece hafızada rastgele bir yere ulaşmaya çalışıyor ve access vialation ya da benzeri hatalar alıyorsun. Çözüm? String için gereken yeri hafızada açıp, a pointer'ını bu hafızadaki yere gösterteceksin. Bunu da malloc ile yapabilirsin. Mesela init metodunda: m->a = (char*) malloc ( strlen(a) + 1 ); diyerek hafızada gereken yeri açıyorsun. mtruct içindeki a pointer'ı da bu yeri gösteriyor. Sonra da strcpy işlemini gönül rahatlığı ile yapıyorsun (umarım). C++ tecrübem yok. Daha şık yolları olabilir. Yanlışlık da olabilir. Ohne Gewähr. :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
LethE Mesaj tarihi: Temmuz 13, 2009 Paylaş Mesaj tarihi: Temmuz 13, 2009 ben anlamadım burdaki çözümü. i. fonksiyon(a, b, c) ii. fonksiyon(a) iii. fonksiyon(a, b); iv. fonksiyon (a, c); ilk ikisini anladım da 3 ve 4 ü birbirinden nasıl ayırt edicekki compiler? bide default valueları fonksiyonun içine direk yazmak varken neden syntaxa tanımladınız ki? void f(const char* a) { cout << a << "b" << "c" << endl; } yapılsa aynı şey olmayacak mı? ki her overload 3 parametreli olmadığından compiler da şaşırmaz dimi? ben mi çok yanlış anladım? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
fizban Mesaj tarihi: Temmuz 13, 2009 Konuyu açan Paylaş Mesaj tarihi: Temmuz 13, 2009 yok lethe, zaten öyle çağırma ihtimallerim var, nasıl overload edebilirim diye sormuştum. şöyle overload edince tüm ihtimalleri kapsadı. fonksiyon (const char* a, const char* b="b", string c="c") fonksiyon (const char* a, string c="c", const char* b="b") mirage çözümünü deneyip başını ekşitecek gene :P Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
LethE Mesaj tarihi: Temmuz 13, 2009 Paylaş Mesaj tarihi: Temmuz 13, 2009 ben soruyu anlamamışım galiba.. fonksiyon (const char* a, const char* b="b", string c="c") fonksiyon (const char* a, string c="c", const char* b="b") yaparsan diyelimki inputumuz e, f ve h. sen ne yaparsan yap outputun ebc yada ecb olmuyormu burda? değeri atıyorsun sonra tekrar b ye ve c ye eşitliyorsun sonuçta. bunu her türlü inputla yazdım bana dediki compiler: error: call of overloaded `f(char, const char[4], char)' is ambiguous| ayrı ayrı yapılcak hepsi gibi gelio bana Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Penthesilea Mesaj tarihi: Temmuz 13, 2009 Paylaş Mesaj tarihi: Temmuz 13, 2009 of nasi hamallik abi C++, bi kere java c# falan kaptirdiktan sonra cok zor su eziyete geri donmek :) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Temmuz 13, 2009 Paylaş Mesaj tarihi: Temmuz 13, 2009 fizban said: yok lethe, zaten öyle çağırma ihtimallerim var, nasıl overload edebilirim diye sormuştum. şöyle overload edince tüm ihtimalleri kapsadı. fonksiyon (const char* a, const char* b="b", string c="c") fonksiyon (const char* a, string c="c", const char* b="b") LethE'nin dediği gibi, bunu compiler'ın kabul etmemesi lazım. Sen bu fonksiyonu fonksiyon("oleeey"); diye çağırırsan compiler hangi fonksiyonu çağrılacağına karar veremez çünkü. O yüzden unambigious diyor. O yüzden ilk önerdiğim çözümde sadece ilk fonksiyona default değerler verdim. Yani şöyle tanımlarsan problem ortadan kalkıyor: fonksiyon (const char* a, const char* b="b", string c="c") fonksiyon (const char* a, string c) Bu durumda ikinci satırda ikinci parametrenin default değeri yok. Yani fonksiyon("oleeey"); diye çağrınca ilk fonksiyonu çağrıcağına karar verebiliyor. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Perfectionist Mesaj tarihi: Temmuz 13, 2009 Paylaş Mesaj tarihi: Temmuz 13, 2009 Penthesilea said: of nasi hamallik abi C++, bi kere java c# falan kaptirdiktan sonra cok zor su eziyete geri donmek :) Hakkaten öyle yahu. Hele Java API'larını falan kurcaladıktan sonra. Neyse. Hepsini bilmek lazım. Belki bir gün low-level birşeyler yaparız :D Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
fizban Mesaj tarihi: Temmuz 13, 2009 Konuyu açan Paylaş Mesaj tarihi: Temmuz 13, 2009 fonksiyon(const char* a, const char* b = "b", string catalogNo="c"); fonksiyon(const char* a, string c, const char* b = "b" ); şeklinde compile ediyor şu an. ayrıca c++ öğretiyorlar, c++ kullanıyoruz, yapacak birşey yok ki :P Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Temmuz 13, 2009 Paylaş Mesaj tarihi: Temmuz 13, 2009 Edik: Ha senin ilk yazdığın da doğruymuş zaten. LethE'nin dediği için yazmışım ben dediklerimi. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
LethE Mesaj tarihi: Temmuz 13, 2009 Paylaş Mesaj tarihi: Temmuz 13, 2009 ben onunkini c/p yapmıştım :P (8. mesaj) şimdi hani elle char fln atıyorsun fonksiyona tamam da ben f("a","b","c") diye çağırsam string m ichar mı karar veremiyor benim anladıgım kadarıyla ilkini kullanıyor hep. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Temmuz 13, 2009 Paylaş Mesaj tarihi: Temmuz 13, 2009 Edik: Bu yazdığımı biraz güncellemem lazım, yanlış bilgi vermiyeyim. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Temmuz 13, 2009 Paylaş Mesaj tarihi: Temmuz 13, 2009 Ha Fizban'ın ilk yazdığı da doğru değilmiş o zaman. Sonradan düzeltmiş. Neyse.. :) C++'da "hodo" diye bir statement yazdığın zaman bunun türü const char* olur, string değil. void foo(string a) {} diye bir fonksiyon yazarsan aslında string türünden bir argüman bekler. Yani aslında çağırırken foo(*new string("hodo")) diye çağırman lazım. Ama C++ kolaylık olsun diye const char* 'ı string'e çevirebiliyor. Yukardaki metodu şu şekilde de çağırabilirsin yani: const char *c = "loyloy"; foo(c); Dediğim gibi, kolaylık olsun diye const char* 'ı string'e çeviriyor. (Bu compiler'a özel bir şey olabilir. Gcc yapıyor.) Ama gerçekten const char* türünden bir argüman bekleyen fonksiyon varsa, öncelik onda oluyor. Yani fizban'ın yazdığı ikinci metodu çağırmak istersen f("a", "b", "c") diye çağırmak yerine, gerçekten bir string nesnesi vermen lazım. Mesela: f("a", *new string("b"), "c") Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
fizban Mesaj tarihi: Temmuz 13, 2009 Konuyu açan Paylaş Mesaj tarihi: Temmuz 13, 2009 mirage, derste öğrendiğim ynei bilgiyi yazayım hemen: compiler'a özel bir bilgi değil o. string class'ının copy constructor özelliği. eheh. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
fizban Mesaj tarihi: Temmuz 13, 2009 Konuyu açan Paylaş Mesaj tarihi: Temmuz 13, 2009 son sorumla karşınızdayım global olarak tanımladığım array'im var static mtruct** Array ; main'de initalize ediyorum; Array = new mtruct* [] ; kullanıyorum ediyorum, program bitmeden ben bunu deinitalize etmek istiyorum: void deinitialize (mtruct **Array, int size) { for (int i=0;i<=size;i++) delete Array[i]; delete Array; } bunun nesi yanlış canlar ? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Penthesilea Mesaj tarihi: Temmuz 13, 2009 Paylaş Mesaj tarihi: Temmuz 13, 2009 Abi cunku Array isimli pointera pointeri size + 1 kere silmeye calisiyorsun :) for(int i=0; i<size; i++) delete *(array + (i * sizeof(mtruct)) ); delete array; ha biri confirm etsin C++ yazmayali cok oldu, ama smdi bu array dedigin sey bir arraye point ediyor. once point ettigi pointer arrayini silmelisin, sonra da kendisini silmelisin. sen de onu yapmak istemissin zaten ama dedigim gibi cotak diye pointera pointeri size+1 defa silmeye calismissin. simdi oncelikle bir arraye pointer arrayin 0. indexini gosterir. yukaridaki for loopu, arrayde mtruct tasindigi icin, once 0. sonra mtruct in size i kadar bi adimdaki, sonra bi sonraki adimdaki (yani 2. indexteki) pointerlari silecek boyle adim adim. * da ise bu memory address in point ettigi seyi donduruyor, yani arrayde tasidigin pointerlari iste. sonra da kendisini siliyorsun arrayin. (bi de abi arrayi kucuk harfli yaz) Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Mirage Mesaj tarihi: Temmuz 13, 2009 Paylaş Mesaj tarihi: Temmuz 13, 2009 Pek bilgim yok ama şuralarda işine yarayan bir şeyler olabilir: http://www.fredosaurus.com/notes-cpp/newdelete/50dynamalloc.html http://en.allexperts.com/q/C-1040/Memory-de-allocation.htm Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
fizban Mesaj tarihi: Temmuz 13, 2009 Konuyu açan Paylaş Mesaj tarihi: Temmuz 13, 2009 ilk evvela başlamadan önce, array'in adı normalde typeArray şeklinde de, buraya geçirirken değiştiriyorum biraz, o yüzden array kaldı adı. yoksa struct'ımın adı da mtruct değil tahmin edersin ki =) <= size olayı mallık tabi de, bir ara saçma bir şekilde değişkenin adı size'dı ama array'in boyutu size+1'di, ondan öyle kalmıştı, sonra düzelttim onu bu öyle kalmış. onu düzeltmeme rağmen bir alt satırında hata veriyor şimdi. hem senin tipinle (ilke senden bahsediyorum !) hem kendi tipimle yazmama rağmen, o fonksiyon çağırıldığında hata aynı: crt detected that the application wrote to memory after end of heap buffer. mirage;onlar da benim yaptığım gibi yapmış, ama gariptir olmuyor. acaba diyorum global değişken olduğu için falan olabilir mi ? Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
fizban Mesaj tarihi: Temmuz 13, 2009 Konuyu açan Paylaş Mesaj tarihi: Temmuz 13, 2009 Windows has triggered a breakpoint in cmpe160.exe. This may be due to a corruption of the heap, which indicates a bug in cmpe160.exe or any of the DLLs it has loaded. This may also be due to the user pressing F12 while cmpe160.exe has focus. The output window may have more diagnostic information. diyor hatta. Link to comment Sosyal ağlarda paylaş Daha fazla paylaşım seçeneği…
Öne çıkan mesajlar