Jump to page: 1 2
Thread overview
January 31, 2010

Deniz(dkvG'deki parametreleri daha kolay tanımlatan uygulama) adında bir uygulama yazdım.
Kodlarını şu anda buradan ulaşabilirsiniz : http://www.ozgurlukicin.com/yapistir/395/

Eğer DkvG'nin kodlarına bakmak isterseniz svn'deki ile aynı(Hatta belki değiştirmişimdir diye kopyala-yapıştır yaptım.).

Şöle bir hata veriyor :dkvG.d(185):



Error: undefined identifier package std.cstream
dkvG.d(185): Error: no property 'dout' for type 'void'
Error: no property 'writefln' for type 'int'
dmd: mtype.c:3882: StructDeclaration* TypeAArray::getImpl(): Assertion `impl' failed.
İptal edildi


Dmd 2.039 kullanıyorum.(şimdi 2.040'ı denedim ve yine hatalı

Sanırım derleyici ile ilgili bir sorun. Çünkü başka zamanlarda da böyle şeyler oluyor.

Söylememe gerek var mı bilmiyorum ama dkvG normalde çalışıyor...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 31, 2010

Teşekkürler, çalıştı.

Şimdi bunla ilgili sorularım var :-)

1.Sanırım auto çalışmaz dediniz. Sorun değil ama ne için çalışmaz merak ettim :-)

  1. Neden import std.cstream; demek zorunda kalıyoruz. Neden std.cstream.dout.writefln() diyemiyoruz ? Bazen diyebiliyoruz bazen diyemiyoruz, neye göre diyebildiğimizi anlamadım.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 31, 2010

Teşekkürler anladım ve accu'ya bakıyorum.

Evet benim gibi sizde std.cstream.dout.writefln(); yazısının neden çalışmadığını anlamamışsınız. Tanımlamamda hata olduğunuda sanmıyorum.(Çünkü böyle tanımlamayı phobos kütüphanesinin kodlarına bakarak öğrendim :-) )

Şuan bu konu ile ilgili bir ilgisi olmayan bir konuya geçeceğim. Şuan derlediğim bütün D programları çalıştırırken parçalama hatası veriyor. Nedenini anlayabilmiş değilim.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 31, 2010

Alıntı:

>

İyi haber: Uzun uzun std.cstream.dout.writefln yazınca da çalışıyor. Herhalde derlemeye çalışırken arada kendimi yanıltmışım.

Hayır kendinizi yanıltmadınız bu her zaman olan bir sorun, d forumuna sormak gerekiyor.

Bende de bazen sorun olurken bazen olmuyor. Örneğin sizin dediğiniz gibi import etmeden denedim sorun yine oldu. Zaten dmd hata mesajı olarakta veriyor.

Ama benim şuan ki sorunum çok daha büyük ve önemli.

Kodlar derleniyor ama şöyle bir hata veriyor:
Parçalama arızası

Bu sadece bu projele özgü değil. Daha önce çalışan romen rakamı ile ilgili olan uygulamada da bu hata var.

Ama dmd'nin içinde bulunan hello dosyasında böyle bir sorun yok. Çok şaşırmış bir durumdayım.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 31, 2010

Öncelikle, haklısın tabii ki. Hiç olmazsa daha anlaşılır mesajlar olmalıydı... :)

  • deniz.d olarak dkvG klasörüne kaydettim

  • Derleme satırı olarak şunu kullandım:

dmd deniz.d dkvG.d

Şu değişikliklerle derleyebildim:

  1. Sınıf tanımının içinde 'auto taban = new dkvG;' gibi bir ifade kullanamayız. Aslında kullanabildiğimiz durumlar da var ama orayı normal kod alanı gibi kullanmak doğru değil. En azından 'auto''nun orada çalışmasını beklemem.
class Deniz
{
   dkvG taban;
  1. O değişkeni ilklemek için kurucu işlevi kullandım:
   this()
   {
       taban=new dkvG;
   }
  1. dkvG.d dout'u kullandığı halde onun modülünü eklemiyordu:
import std.cstream;
  1. Her ne kadar çalışır diye düşünsem de, uzunca 'std.cstream.dout.writefln' olarak yazdığın satırı kısalttım:
       dout.writefln(eş[vTAdı][tAdı][veriAdı].length);
  1. deneme.d'yi kullanmak yerine, kendim deniz.d'nin sonuna bir main ekledim. Tabii ki normalde orada olmaması gerekir:
void main()
{}

Derlendi... :)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 31, 2010

Alıntı (canalpay):

>

1.Sanırım auto çalışmaz dediniz. Sorun değil ama ne için çalışmaz merak ettim :-)

Ben C++'dan geldiğim için, öncelikle o mantıkla düşünüyorum: sınıf tanımlarında, o sınıfı oluşturan üyeler bildirilir. Ek olarak, bu sınıfın üye işlevleri olur.

Yanı sınıfın tanımı, kod değildir.

http://accu.org/index.php/accu_branches/accu_usa/past

İlginç bir şekilde, orada yapıların içine kod yerleştirilebiliyordu; ve aynen senin yaptığın gibi, o kodlar yapı nesnelerinin kurulmalarını sağlıyordu. Yani sınıf bloğu içindeki kodlar kurucu kodlar oluyordu.

Sınıfın türünden olan nesneleri oluşturmak ise kurucu işlevin görevidir. Aynı mantığın D için de sürdüğünü düşünüyorum.

Asıl neden şu olabilir: Kabul edilse, daha önce yazdığın 'new dkvG' hangi an çalıştırılır? Sınıfın tanımı derleme zamanında bir kere okunur ve derlenir. Ama o 'new dkvG' ifadesinin çalışması için çalışma zamanından bir ana gerek var.

İşte o an, bir nesne oluşma anıdır.

Evet, sanırım sen sınıfın tanımlandığı bloğu kurucu kodları olarak düşündün. Ama o zaman da kurucuya parametre verme olanağımız bulunmazdı.

Sonuçta: sınıf, üyelerini tanımlar ve kurucu işlev(ler) de nesnelerini kurarlar.

Alıntı:

>
  1. Neden import std.cstream; demek zorunda kalıyoruz.

dout nesnesi onun içinde tanımlandığı için.

Alıntı:

>

Neden std.cstream.dout.writefln() diyemiyoruz ? Bazen diyebiliyoruz bazen diyemiyoruz, neye göre diyebildiğimizi anlamadım.

Bunu ben de anlamadım. En azından başına nokta koyarak çalışmalıydı: '.std.cstream.dout.writefln'. Böylece evrensel isim alanındakinden bahsettiğimiz anlaşılırdı. Ama bu fikirleri C++'dan taşıyorum. D'nin modül ve paket kavramları tam denk değil.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 31, 2010

İyi haber: Uzun uzun std.cstream.dout.writefln yazınca da çalışıyor. Herhalde derlemeye çalışırken arada kendimi yanıltmışım.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 01, 2010

Alıntı:

>

Ama dmd'nin hatası olması da çok mümkün. Forumda sormak için biraz daha kanıta ihtiyaç var. Örneğin dkv'nin deneme programı çalışırken mi oluyor?

Foruma import olayını soralım dedim. Çünkü import std.cstream; dout.writefln() deyince olmasına karşın std.cstream.dout.writefln() deyince hata veriyor. Ama phobos kütüphanesinde böyle bir kullanım var. Neye göre hatalı neye göre değil öğrenebilmek için. Ama şimdiki meselemiz bu değil.


Parçalama Hatası:****

samples dizininin d dizindeki hello.d uygulamasını çalıştırıyor. Ama wc wc2 uygulamalarını çalıştırmıyor.

wc için yaptıklarım:


canalpay@canalpay-pardus d $ dmd wc.d
canalpay@canalpay-pardus d $ ./wc
Parçalama arızası

wc2 için yaptıklarım:


canalpay@canalpay-pardus d $ dmd wc2.d
canalpay@canalpay-pardus d $ ./wc2
Parçalama arızası

hello.d dosyasını çalıştırıyor.

Kendi yazdığım deneme.d adlı dosya :

import std.stdio;
void main(){

   writeln("Merhaba dünya");

}

Çalıştırmaya çalıştığımda oluşan hata:


canalpay@canalpay-pardus d $ dmd deneme.d
canalpay@canalpay-pardus d $ ./deneme
Parçalama arızası

Umarım yeterince açıklayıcı olmuşumdur. Ve sanıyorum ki sorun derleyicide değil: İşletim sistemimde: Yoksa aynı hata sizde de olurdu ve zaten dmd 2.040'ı kurduktan sonra Deniz uygulamasını çalıştırabilmiştim. Ama şuan böyle bir sorun oldu.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 31, 2010

Alıntı (canalpay):

>

Alıntı:

>

İyi haber: Uzun uzun std.cstream.dout.writefln yazınca da çalışıyor. Herhalde derlemeye çalışırken arada kendimi yanıltmışım.

Hayır kendinizi yanıltmadınız bu her zaman olan bir sorun, d forumuna sormak gerekiyor.

import cstream; satırını kaldırınca bu konunun ilk mesajında gösterdiğin hataları alıyorum. Ekleyince sorun yok.

Alıntı:

>

Bende de bazen sorun olurken bazen olmuyor. Örneğin sizin dediğiniz gibi import etmeden denedim sorun yine oldu.

O normal; çünkü o isimleri kullanabilmek için, onları bildiren modülü eklememiz gerekir.

Alıntı:

>

Kodlar derleniyor ama şöyle bir hata veriyor:
Parçalama arızası

Bunu kıstırmamız gerek. Hangi kodla ilgili olduğunu belirleyebiliyor musun? Bazen olup bazen olmamak, genellikle kendi kodumuzdaki hatalardan oluşur. Yani çalışıyor gibi görünse bile, tesadüfen öyle olabilir.

Ama dmd'nin hatası olması da çok mümkün. Forumda sormak için biraz daha kanıta ihtiyaç var. Örneğin dkv'nin deneme programı çalışırken mi oluyor?

Alıntı:

>

Bu sadece bu projele özgü değil. Daha önce çalışan romen rakamı ile ilgili olan uygulamada da bu hata var.

Yeni dmd'yi kurduğun zaman yeni derleyicinin kütüphane dosyasını da /usr/lib'e kopyaladığını varsayıyorum...

Romen rakamı programında ne yapınca oluyor?

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 01, 2010

Evet dediğiniz doğruymuş. Ben konsol ile halletmeye çalışıyordum. Daha önceki sürümden libphobos kaldığı için bana soru soruyordu. Bende rw yazıp enter'a bastım. Ama üzerine tekrar yazmamış. Şimdi gui aracılıyla kopyaladım ve çalıştı.Teşekkürler,

Sizi yorduğum için üzgünüm.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

« First   ‹ Prev
1 2