Kesalahan “Cout Ambigu” di C++

Kesalahan Cout Ambigu Di C



Artikel ini membahas tentang kesalahan ambigu dalam bahasa pemrograman C++. Situasi ambigu muncul ketika kompiler tidak dapat menentukan metode atau operator yang akan digunakan pada tugas yang berbeda. Terkadang, kita menggunakan fungsi parameter yang sama dengan namespace yang sama, dan kemudian cout didefinisikan dalam kedua kasus tersebut. Saat kita menjalankan program, kompiler menghasilkan kesalahan cout ambigu karena kompiler tidak memahami arti yang ditunjukkan kode ini. Ambiguitas cout muncul ketika ada konflik antara namespace yang ditentukan atau beberapa deklarasi fungsi di dalam program.

Contoh 1:

Ini adalah contoh kesalahan cout ambigu yang banyak terjadi pada pemrograman C++. Di sini, kita akan melihat bagaimana kompiler menghasilkan kesalahan ambigu pada cout ketika kita menggunakan beberapa namespace. Cuplikan kode contoh ini disebutkan sebagai berikut:







#termasuk

ruang nama laptop {

ruang kosong menampilkan ( ) {

std :: cout << 'ini adalah Namespace laptop' << std :: akhir ;

}

}

ruang nama seluler {

ruang kosong menampilkan ( ) {


std :: cout << 'ini adalah Namespace seluler' << std :: akhir ;

}

}

ke dalam utama ( ) {

menggunakan ruang nama laptop ;
menggunakan ruang nama seluler ;

menampilkan ( ) ;

kembali 0 ;


}

Di sini, kami mengambil program dengan dua namespace yang ditentukan sesuai kebutuhan kami. Kami ingin menampilkan string di layar. Output dari kode ini terlampir sebagai berikut:





Setelah eksekusi kode, kesalahan dihasilkan tentang situasi ambigu. Kesalahan ini terjadi karena ketika kompiler membaca kode, kompiler tidak mendapatkan input yang jelas dari pengguna. Kami menggunakan beberapa deklarasi namespace dalam kode kami. Di seluruh kode, kami menggunakan metode 'tampilan' hanya untuk menampilkan output di layar. Kompiler tidak tahu metode tampilan mana yang terkait dengan namespace mana. Kita perlu membuat kodenya sederhana dan jelas sehingga compiler dapat dengan mudah memahami langkah-langkahnya tanpa membuat kode menjadi ambigu.





Solusi untuk kesalahan ini adalah dengan memanggil metode dengan namespace terkait di fungsi utama agar kompiler dapat lebih memahaminya. Kami menentukan dengan jelas metode namespace mana yang ingin kami panggil di bagian eksekusi utama kami.

#termasuk

ruang nama laptop {

ruang kosong menampilkan ( ) {


std :: cout << 'ini adalah Namespace laptop' << std :: akhir ;

}

}

ruang nama seluler {

ruang kosong menampilkan ( ) {

std :: cout << 'ini adalah Namespace seluler' << std :: akhir ;

}

}

ke dalam utama ( ) {

menggunakan ruang nama laptop ;
menggunakan ruang nama seluler ;
laptop :: menampilkan ( ) ;
kembali 0 ;


}

Di sini, kita cukup menautkan metode display() dengan namespace “laptop” di fungsi utama seperti yang terlihat pada tangkapan layar sebelumnya. Sekarang, jalankan programnya. Outputnya ditampilkan di jendela konsol.



Contoh 2:

Skenario ini terkait dengan kesalahan ambigu cout di C++. Kompiler menunjukkan kesalahan ketika tidak memahami alur eksekusi. Cuplikan kode contoh ini terlampir di bawah ini:

#termasuk

ruang nama Bahasa C {

ruang kosong mencetak ( ke dalam Saya ) {

std :: cout << 'Ruang nama bahasa C:' << Saya << std :: akhir ;

}

}

ruang nama Jawa {

ruang kosong mencetak ( ke dalam J ) {

std :: cout << 'Ruang nama bahasa java:' << J << std :: akhir ;

}

}

menggunakan ruang nama Bahasa C ;

menggunakan ruang nama Jawa ;

ke dalam utama ( ) {

mencetak ( 5 ) ;
kembali 0 ;


}

Dalam kode ini, kami mendefinisikan semua header perpustakaan yang diperlukan. Kami membuat dua namespace untuk tujuan berbeda. Di namespace “Clingual”, kami mendefinisikan metode “print” yang mengambil nilai integer dari pengguna. Dalam fungsi “cetak”, kami ingin menampilkan nilai yang diberikan pengguna di layar konsol. Kami menampilkan output yang diperlukan menggunakan aliran “cout” dalam kode kami. Setelah itu, kita mendefinisikan namespace lain yang namanya “Java”.

Di namespace “Java” ini, kita menggunakan metode “print” lagi untuk menampilkan nilai yang diteruskan pengguna menggunakan “cout”. Kami memanggil kedua namespace untuk digunakan dalam fungsi utama kami untuk mendapatkan output yang diinginkan pada jendela konsol di C++. Dalam fungsi “utama”, kita memanggil fungsi “print()” yang kelebihan beban untuk menampilkan nilai yang diteruskan di layar konsol.

Klik opsi “eksekusi” dari menu utama dan pilih opsi “kompilasi & jalankan”. Kesalahan tentang ambiguitas terjadi pada eksekusi kode ini. Tangkapan layar kesalahan terlampir sebagai berikut:

Kesalahan ini menunjukkan bahwa kompiler bingung dengan fungsi print() yang dipanggil yang kelebihan beban. Kesalahan ini ada pada baris 19,  “cetak (5)”. Kompiler bingung tentang namespace yang memiliki fungsi kelebihan beban ini. Para pemula sering kali terjebak dalam kesalahan seperti ini.

Mari kita atasi kesalahan ini yang sebenarnya tidak rumit. Kesalahan yang ambigu dapat dengan mudah diselesaikan. Kita harus menentukan namespace di sepanjang fungsi yang kelebihan beban di fungsi 'utama' untuk visibilitas dan pemahaman kompiler. Seperti dalam program ini, kami menambahkan “java::print(5)” ini ke dalam kode yang sudah ada seperti yang disebutkan berikut ini:

#termasuk

ruang nama Bahasa C {

ruang kosong mencetak ( ke dalam Saya ) {

std :: cout << 'Ruang nama bahasa C:' << Saya << std :: akhir ;

}

}

ruang nama Jawa {

ruang kosong mencetak ( ke dalam J ) {

std :: cout << 'Ruang nama bahasa java:' << J << std :: akhir ;

}

}

menggunakan ruang nama Bahasa C ;

menggunakan ruang nama Jawa ;

ke dalam utama ( ) {

Jawa :: mencetak ( 5 ) ;
kembali 0 ;


}

Sekarang, program dijalankan dengan sempurna tanpa kesalahan ambigu dan menampilkan output di layar konsol. Output dari program ini terlampir sebagai berikut:

Contoh 3:

Ini adalah contoh terakhir dan terakhir terkait kesalahan yang dihasilkan karena masalah yang ambigu. Kompiler tidak bisa mendapatkan hasil yang benar. Cuplikan kode contoh ini dilampirkan berikut ini untuk pemahaman pengguna yang lebih baik:

Di sini, kami mendefinisikan perpustakaan yang diperlukan. Setelah itu, kita mendefinisikan namespace yang berisi kelas yang ingin kita tampilkan stringnya di jendela konsol. Kami menyebut namespace yang ditentukan ini dalam fungsi “main” dengan variabel “c”. Setelah itu, kita memanggil metode print() menggunakan objek namespace. Kami menampilkan string lagi di layar konsol setelah pemanggilan metode. Outputnya harus berupa string dan ditampilkan di layar konsol. Saat kita mengeksekusi kode ini, kesalahan terjadi seperti yang ditunjukkan berikut ini:

#termasuk

menggunakan ruang nama std ;

ruang nama ruangNamasaya {

kelas cout {
publik :
ruang kosong mencetak ( ) {


cout << 'Cut khusus' << std :: akhir ;

}

} ;

}

ke dalam utama ( ) {

ruangNamasaya :: cout C ;
C. mencetak ( ) ;


cout << 'Halo Dunia!' << std :: akhir ;

kembali 0 ;

}

Kompiler tidak memilih pernyataan cout yang menampilkan data di layar konsol. Kompiler tidak dapat memahami namespace milik pernyataan cout dan menghasilkan kesalahan. Solusi untuk kesalahan ini adalah dengan menambahkan objek namespace dengan pernyataan cout agar kompiler mudah dibaca dan dipahami. Tambahkan “std::” di sepanjang pernyataan cout dan jalankan kodenya. Output berikut ditampilkan di layar konsol:

Kesimpulan

Di sini, kita dapat mengatakan bahwa menampilkan output pada layar konsol juga menghasilkan kesalahan yang bukan merupakan kesalahan sintaksis atau kesalahan logika. Seringkali, pengguna menulis kode dengan pemahaman yang baik, tetapi tidak dapat dimengerti oleh kompiler. Kompiler tidak jelas tentang masukannya. Jadi, perjelas setiap langkah kode dengan namespace dan sintaksis yang tepat untuk menghindari kesalahan dalam bahasa pemrograman C++. Langkah-langkah yang diperlukan untuk menyelesaikan masalah ini adalah menggunakan kualifikasi eksplisit, mencegah bentrokan namespace, dan memastikan bahwa fungsi atau objek yang dimaksud mengidentifikasi langkah-langkah yang diperlukan untuk menyelesaikan masalah ini.