C++'da “Cout Belirsiz” Hatası

C Da Cout Belirsiz Hatasi



Bu makale, C++ programlama dilindeki belirsiz hatalarla ilgilidir. Belirsiz durum, derleyicinin farklı görevlerde kullanılacak yöntemleri veya operatörleri belirleyemediği durumlarda ortaya çıkar. Bazen aynı parametre fonksiyonunu aynı isim alanıyla kullanırız ve her iki durumda da cout tanımlanır. Programı çalıştırdığımızda derleyici bu kodun hangi anlamı gösterdiğini anlamadığından cout belirsiz hatası üretiyor. Cout belirsizliği, program içindeki tanımlı ad alanları veya birden fazla işlev bildirimi arasında bir çakışma olduğunda ortaya çıkar.

Örnek 1:

Bu, çoğunlukla C++ programlamasında ortaya çıkan belirsiz bir hata örneğidir. Burada, birden fazla ad alanı kullandığımızda derleyicinin cout'ta nasıl belirsiz hatalar ürettiğini göreceğiz. Bu örneğin kod parçacığı aşağıda belirtilmiştir:







#include

ad alanı dizüstü bilgisayar {

geçersiz görüntülemek ( ) {

std :: cout << 'Bu dizüstü bilgisayar Ad Alanı' << std :: sonunda ;

}

}

ad alanı mobil {

geçersiz görüntülemek ( ) {


std :: cout << 'bu mobil Ad Alanıdır' << std :: sonunda ;

}

}

int ana ( ) {

kullanarak ad alanı dizüstü bilgisayar ;
kullanarak ad alanı mobil ;

görüntülemek ( ) ;

geri dönmek 0 ;


}

Burada ihtiyacımıza göre tanımlanmış iki ad alanına sahip bir program aldık. Stringleri ekranda göstermek istiyoruz. Bu kodun çıktısı aşağıdaki dosyaya eklenmiştir:





Kodun yürütülmesi üzerine, belirsiz durumla ilgili hata üretilir. Hata, derleyici kodu okuduğunda derleyicinin kullanıcı tarafından net bir girdi alamamasından kaynaklanmaktadır. Kodumuzda birden fazla ad alanı bildirimi kullandık. Kodun tamamında “display” yöntemini yalnızca çıktıyı ekranda görüntülemek için kullandık. Derleyicinin hangi görüntüleme yönteminin hangi ad alanıyla ilişkili olduğu hakkında hiçbir fikri yoktur. Kodu basit ve anlaşılır hale getirmemiz gerekiyor ki derleyici, kodu belirsizleştirmeden adımları kolayca anlasın.





Bu hatanın çözümü derleyicinin daha iyi anlaması için metodu ana fonksiyon içerisinde ilgili isim alanı ile çağırmaktır. Ana yürütme bölümümüzde hangi ad alanı yöntemini çağırmak istediğimizi açıkça belirtiyoruz.

#include

ad alanı dizüstü bilgisayar {

geçersiz görüntülemek ( ) {


std :: cout << 'Bu dizüstü bilgisayar Ad Alanı' << std :: sonunda ;

}

}

ad alanı mobil {

geçersiz görüntülemek ( ) {

std :: cout << 'bu mobil Ad Alanıdır' << std :: sonunda ;

}

}

int ana ( ) {

kullanarak ad alanı dizüstü bilgisayar ;
kullanarak ad alanı mobil ;
dizüstü bilgisayar :: görüntülemek ( ) ;
geri dönmek 0 ;


}

Burada, önceki ekran görüntüsünde görüldüğü gibi display() yöntemini ana fonksiyondaki “laptop” ad alanına bağlayabiliriz. Şimdi programı çalıştırın. Çıktı konsol penceresinde görüntülenir.



Örnek 2:

Bu senaryo, C++'daki belirsiz hatayla ilgilidir. Derleyici yürütme akışını anlamadığında hata gösterir. Bu örneğin kod parçacığı aşağıdaki ekte yer almaktadır:

#include

ad alanı C dili {

geçersiz Yazdır ( int Ben ) {

std :: cout << 'C dilinin ad alanı: ' << Ben << std :: sonunda ;

}

}

ad alanı java {

geçersiz Yazdır ( int J ) {

std :: cout << 'Java dilinin ad alanı: ' << J << std :: sonunda ;

}

}

kullanarak ad alanı C dili ;

kullanarak ad alanı java ;

int ana ( ) {

Yazdır ( 5 ) ;
geri dönmek 0 ;


}

Bu kodda gerekli tüm kütüphane başlıklarını tanımlıyoruz. Farklı amaçlar için iki ad alanı oluşturuyoruz. “Clanguage” namespace’inde kullanıcıdan tamsayı değerini alan “print” metodunu tanımlıyoruz. “Print” fonksiyonunda kullanıcının konsol ekranında ilettiği değeri göstermek istiyoruz. Kodumuzda “cout” akışını kullanarak gerekli çıktıyı görüntülüyoruz. Daha sonra adı “Java” olan başka bir namespace tanımlıyoruz.

Bu “Java” namespace’inde kullanıcının “cout” kullanarak ilettiği değeri görüntülemek için yine “print” metodunu kullanıyoruz. C++'da konsol penceresinde istenilen çıktıyı elde etmek için her iki ad alanını da ana işlevimizde kullanmak üzere çağırırız. “Main” fonksiyonunda, aktarılan değeri konsol ekranında göstermek için “print()” aşırı yüklenmiş fonksiyonunu çağırıyoruz.

Ana menüden “yürüt” seçeneğine tıklayın ve “derle ve çalıştır” seçeneğini seçin. Belirsizlikle ilgili hata bu kodun yürütülmesinde ortaya çıkıyor. Hata ekran görüntüsü aşağıdaki şekilde eklenmiştir:

Bu hata, derleyicinin çağrılan aşırı yüklenmiş print() işlevi konusunda kafasının karıştığını gösterir. Bu hata 19. satırda, 'yazdır (5)'. Derleyicinin bu aşırı yüklenmiş fonksiyonun ait olduğu ad alanı konusunda kafası karışıktır. Yeni başlayanlar çoğu zaman bu tür hatalara takılıp kalırlar.

Aslında pek de karmaşık olmayan bu hatayı çözelim. Belirsiz hatalar kolayca çözülür. Derleyicinin görünürlüğü ve anlaşılması için “ana” fonksiyondaki aşırı yüklenmiş fonksiyon boyunca ad alanını belirtmeliyiz. Bu programda olduğu gibi bu “java::print(5)”i mevcut kodumuza aşağıdaki şekilde ekliyoruz:

#include

ad alanı C dili {

geçersiz Yazdır ( int Ben ) {

std :: cout << 'C dilinin ad alanı: ' << Ben << std :: sonunda ;

}

}

ad alanı java {

geçersiz Yazdır ( int J ) {

std :: cout << 'Java dilinin ad alanı: ' << J << std :: sonunda ;

}

}

kullanarak ad alanı C dili ;

kullanarak ad alanı java ;

int ana ( ) {

java :: Yazdır ( 5 ) ;
geri dönmek 0 ;


}

Artık program herhangi bir belirsiz hata olmadan mükemmel bir şekilde yürütülüyor ve çıktıyı konsol ekranında gösteriyor. Bu programın çıktısı aşağıdaki dosyaya eklenmiştir:

Örnek 3:

Bu, belirsiz bir sorun nedeniyle oluşan hataya ilişkin son ve son örnektir. Derleyici doğru sonucu alamıyor. Bu örneğin kod pasajı, kullanıcının daha iyi anlaması için aşağıya eklenmiştir:

Burada gerekli kütüphaneleri tanımlıyoruz. Daha sonra konsol penceresinde stringi görüntülemek istediğimiz sınıfı içeren bir namespace tanımlıyoruz. Bu tanımlı namespace’i “main” fonksiyonunda “c” değişkeni ile çağırıyoruz. Bundan sonra bir ad alanı nesnesi kullanarak print() yöntemini çağırıyoruz. Metod çağrısından sonra stringi tekrar konsol ekranında görüntülüyoruz. Çıktı her iki dize de olmalı ve konsol ekranında görüntülenmelidir. Bu kodu çalıştırdığımızda aşağıdaki gibi hata oluşuyor:

#include

kullanarak ad alanı std ;

ad alanı myNamespace {

sınıf cout {
halk :
geçersiz Yazdır ( ) {


cout << 'Özel kot' << std :: sonunda ;

}

} ;

}

int ana ( ) {

myNamespace :: cout C ;
C. Yazdır ( ) ;


cout << 'Selam Dünya!' << std :: sonunda ;

geri dönmek 0 ;

}

Derleyici, verileri konsol ekranında görüntüleyen cout ifadesini seçmedi. Derleyici cout ifadesine ait olan ad alanını anlayamıyor ve hata üretiyor. Bu hatanın çözümü, derleyicinin okunabilirliği ve anlaşılması için cout ifadesine sahip bir ad alanı nesnesi eklemektir. Cout deyiminin yanına “std::” ekleyin ve kodu çalıştırın. Konsol ekranında aşağıdaki çıktı görüntülenir:

Çözüm

Burada konsol ekranında bir çıktının görüntülenmesinin aynı zamanda sözdizimi hatası ya da mantıksal hata olmayan bir hata ürettiğini söyleyebiliriz. Çoğu zaman kullanıcı iyi bir kod yazar, ancak derleyici için bu anlaşılır değildir. Derleyici girdi konusunda belirsizdir. Bu nedenle, C++ programlama dilindeki hataları önlemek için her kod adımını uygun ad alanı ve sözdizimi ile netleştirin. Bu sorunun çözümünde yer alan adımlar, açık niteleyicilerin kullanılması, ad alanı çakışmalarının önlenmesi ve amaçlanan işlevlerin veya nesnelerin bu sorunun çözümünde yer alan adımları tanımlamasını sağlamaktır.