Merhaba,
Basit kısımlarını sormayacağım ama istemeden basite girebilirim...:)
Öncelikle şöyle bir isim alanımız olsun:
Alıntı:
>> #include <cmath>
>
> namespace abo {
> class ibo {
> public double sinPi() {
> return ::sin(M_PI);
> }
> };
> }
> ```
Şimdi biz **sinPi()** işlevini çağırabilmek için using abo::ibo; yaptıktan sonra **ibo::sinPi()** şeklinde çağırmamız gerekiyormuş. Farkındaysanız soruyu sorup kolaya kaçmadım, öğrenmeye çalıştım...:)
Ancak anlamadığım ve hata veren şeyler var! O da return ile dönüş yapılırken, solu boş :: (iki nokta üst üste) ile sanırım std::'nin isim alanına erişilmeye çalışılıyor; ya da ibo isim alanından çıkılmaya, öyle değil mi? Eğer öyleyse niye hata vermekte?
'/tmp/ccTFYkOS.o: In function `pt::DMath::fix(double, double)':
test.cpp:(.text._ZN11prayertimes5DMath3fixEdd[pt::DMath::fix(double, double)]+0x28):
undefined reference to `sinPi'
collect2: ld returned 1 exit status
make: *** [p] Hata 1'
Bir de bazen sadece tek nokta kullanıldığını görüyorum. Sanırım bir sınıf (örneğin ibo) falanca diye tanımlandığında bunu **falanca.sinPi()** şeklinde ulaşılıyor. Ama bu bir değişken olduğunda yine eski şekle dönülüyor, öyle değil mi?
Basit soruya, daha doğrusu cevaplanmaması gereken konulara girmek istersek; bizim ECMA uyumlu dillerde nesneler arasını nokta ile ayırmamız C++'da iki nokta üst üsteye denk geliyor olmalı. Belki de yanılıyorum, olay tamamen isim alanları (namespace) ile ilgili. C'de ise bir sınıf veya yapı içindeki nesneye -> işaretleri ile eriştiğimizi zannediyorum. Belki OOP denilen olaylar, BT dillerine başta hakim olsaydı, bu farklılıklar daha aza indirilmiş olacaktı diye düşünmekteyim.
Sevgiler, saygılar...
--
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]