Ralat 'Cout Is Ambiguous' dalam C++

Ralat Cout Is Ambiguous Dalam C



Artikel ini mengambil berat tentang ralat samar-samar cout dalam bahasa pengaturcaraan C++. Situasi samar-samar muncul apabila pengkompil tidak dapat menentukan kaedah atau pengendali yang akan digunakan pada tugas yang berbeza. Kadangkala, kami menggunakan fungsi parameter yang sama dengan ruang nama yang sama, dan kemudian cout ditakrifkan dalam kedua-dua kes. Apabila kita melaksanakan program, pengkompil menjana ralat samar-samar cout kerana pengkompil tidak memahami maksud yang ditunjukkan oleh kod ini. Kekaburan cout timbul apabila konflik wujud antara ruang nama yang ditentukan atau berbilang pengisytiharan fungsi dalam program.

Contoh 1:

Ini adalah contoh ralat samar-samar cout yang kebanyakannya berlaku dalam pengaturcaraan C++. Di sini, kita akan melihat bagaimana pengkompil menjana ralat samar-samar pada cout apabila kita menggunakan berbilang ruang nama. Coretan kod contoh ini disebut dalam perkara berikut:







#include

ruang nama komputer riba {

batal paparan ( ) {

std :: cout << 'ini ruang nama komputer riba' << std :: endl ;

}

}

ruang nama mudah alih {

batal paparan ( ) {


std :: cout << 'ini ialah Ruang Nama mudah alih' << std :: endl ;

}

}

int utama ( ) {

menggunakan ruang nama komputer riba ;
menggunakan ruang nama mudah alih ;

paparan ( ) ;

kembali 0 ;


}

Di sini, kami mengambil program dengan dua ruang nama yang ditakrifkan mengikut keperluan kami. Kami mahu memaparkan rentetan pada skrin. Output kod ini dilampirkan dalam yang berikut:





Selepas pelaksanaan kod, ralat dijana mengenai situasi samar-samar cout. Ralat dijana kerana apabila pengkompil membaca kod, pengkompil tidak mendapat input yang jelas daripada penghujung pengguna. Kami menggunakan berbilang pengisytiharan ruang nama dalam kod kami. Dalam keseluruhan kod, kami menggunakan kaedah 'paparan' semata-mata untuk memaparkan output pada skrin. Pengkompil tidak tahu kaedah paparan yang berkaitan dengan ruang nama mana. Kita perlu membuat kod mudah dan jelas supaya pengkompil mudah memahami langkah-langkah tanpa membuat kod samar-samar.





Penyelesaian kepada ralat ini adalah dengan memanggil kaedah dengan ruang nama yang berkaitan dalam fungsi utama untuk pengkompil untuk lebih memahami. Kami menyatakan dengan jelas kaedah ruang nama yang ingin kami panggil dalam bahagian pelaksanaan utama kami.

#include

ruang nama komputer riba {

batal paparan ( ) {


std :: cout << 'ini ruang nama komputer riba' << std :: endl ;

}

}

ruang nama mudah alih {

batal paparan ( ) {

std :: cout << 'ini ialah Ruang Nama mudah alih' << std :: endl ;

}

}

int utama ( ) {

menggunakan ruang nama komputer riba ;
menggunakan ruang nama mudah alih ;
komputer riba :: paparan ( ) ;
kembali 0 ;


}

Di sini, kita hanya boleh memautkan kaedah paparan() dengan ruang nama 'komputer riba' dalam fungsi utama seperti yang dilihat dalam tangkapan skrin sebelumnya. Sekarang, jalankan program. Output dipaparkan pada tetingkap konsol.



Contoh 2:

Senario ini berkaitan dengan ralat samar-samar cout dalam C++. Pengkompil menunjukkan ralat apabila ia tidak memahami aliran pelaksanaan. Coretan kod contoh ini dilampirkan dalam perkara berikut:

#include

ruang nama Clanguage {

batal cetak ( int i ) {

std :: cout << 'Ruang nama bahasa C: ' << i << std :: endl ;

}

}

ruang nama java {

batal cetak ( int j ) {

std :: cout << 'Ruang nama bahasa java: ' << j << std :: endl ;

}

}

menggunakan ruang nama Clanguage ;

menggunakan ruang nama java ;

int utama ( ) {

cetak ( 5 ) ;
kembali 0 ;


}

Dalam kod ini, kami mentakrifkan semua pengepala perpustakaan yang diperlukan. Kami mencipta dua ruang nama untuk tujuan yang berbeza. Dalam ruang nama 'Clanguage', kami mentakrifkan kaedah 'cetak' yang mengambil nilai integer daripada pengguna. Dalam fungsi 'cetak', kami ingin menunjukkan nilai yang dihantar oleh pengguna pada skrin konsol. Kami memaparkan output yang diperlukan menggunakan aliran 'cout' dalam kod kami. Selepas itu, kami menentukan ruang nama lain yang namanya 'Java'.

Dalam ruang nama 'Java' ini, kami menggunakan kaedah 'cetak' sekali lagi untuk memaparkan nilai yang pengguna lalui menggunakan 'cout'. Kami memanggil kedua-dua ruang nama untuk kegunaan dalam fungsi utama kami untuk mendapatkan output yang diingini pada tetingkap konsol dalam C++. Dalam fungsi 'utama', kami memanggil fungsi 'print()' terlebih beban untuk menunjukkan nilai yang diluluskan pada skrin konsol.

Klik pada pilihan 'laksana' dari menu utama dan pilih pilihan 'kompilasi & jalankan'. Ralat tentang kekaburan berlaku pada pelaksanaan kod ini. Tangkapan skrin ralat dilampirkan seperti berikut:

Ralat ini menunjukkan bahawa pengkompil keliru tentang fungsi cetak() terbeban yang dipanggil. Ralat ini terdapat pada baris 19,  “cetak (5)”. Pengkompil keliru tentang ruang nama yang dimiliki oleh fungsi terlampau beban ini. Pemula sentiasa terperangkap dalam jenis kesilapan ini pada kebanyakan masa.

Mari kita selesaikan ralat ini yang sebenarnya tidak rumit. Kesilapan yang tidak jelas dapat diselesaikan dengan mudah. Kita mesti menentukan ruang nama di sepanjang fungsi terlampau beban dalam fungsi 'utama' untuk keterlihatan dan pemahaman pengkompil. Seperti dalam program ini, kami menambah 'java::print(5)' ini dalam kod sedia ada kami seperti yang dinyatakan dalam perkara berikut:

#include

ruang nama Clanguage {

batal cetak ( int i ) {

std :: cout << 'Ruang nama bahasa C: ' << i << std :: endl ;

}

}

ruang nama java {

batal cetak ( int j ) {

std :: cout << 'Ruang nama bahasa java: ' << j << std :: endl ;

}

}

menggunakan ruang nama Clanguage ;

menggunakan ruang nama java ;

int utama ( ) {

java :: cetak ( 5 ) ;
kembali 0 ;


}

Kini, program ini dilaksanakan dengan sempurna tanpa sebarang ralat samar-samar cout dan memaparkan output pada skrin konsol. Output program ini dilampirkan seperti berikut:

Contoh 3:

Ini adalah contoh terakhir dan terakhir yang berkaitan dengan ralat yang dijana kerana masalah yang tidak jelas. Pengkompil tidak boleh mendapatkan hasil yang betul. Coretan kod contoh ini dilampirkan dalam perkara berikut untuk pemahaman pengguna yang lebih baik:

Di sini, kami mentakrifkan perpustakaan yang diperlukan. Selepas itu, kami mentakrifkan ruang nama yang mengandungi kelas di mana kami ingin memaparkan rentetan pada tetingkap konsol. Kami memanggil ruang nama yang ditakrifkan ini dalam fungsi 'utama' dengan pembolehubah 'c'. Selepas itu, kami memanggil kaedah print() menggunakan objek ruang nama. Kami memaparkan rentetan sekali lagi pada skrin konsol selepas panggilan kaedah. Output mestilah kedua-dua rentetan dan dipaparkan pada skrin konsol. Apabila kami melaksanakan kod ini, ralat berlaku seperti yang ditunjukkan dalam yang berikut:

#include

menggunakan ruang nama std ;

ruang nama myNamespace {

kelas cout {
awam :
batal cetak ( ) {


cout << 'Cout tersuai' << std :: endl ;

}

} ;

}

int utama ( ) {

myNamespace :: cout c ;
c. cetak ( ) ;


cout << 'Hai dunia!' << std :: endl ;

kembali 0 ;

}

Pengkompil tidak memilih pernyataan cout yang memaparkan data pada skrin konsol. Pengkompil tidak dapat memahami ruang nama yang dimiliki oleh pernyataan cout dan menghasilkan ralat. Penyelesaian kepada ralat ini ialah menambah objek ruang nama dengan pernyataan cout untuk kebolehbacaan dan pemahaman pengkompil. Tambah 'std::' di sepanjang pernyataan cout dan jalankan kod. Output berikut dipaparkan pada skrin konsol:

Kesimpulan

Di sini, kita boleh mengatakan bahawa memaparkan output pada skrin konsol juga menjana ralat yang bukan ralat sintaks mahupun ralat logik. Selalunya, pengguna menulis rasa kod yang baik, tetapi ia tidak dapat difahami untuk pengkompil. Pengkompil adalah samar-samar tentang input. Jadi, jelaskan setiap langkah kod dengan jarak nama dan sintaks yang betul untuk mengelakkan ralat dalam bahasa pengaturcaraan C++. Langkah-langkah yang terlibat dalam menyelesaikan masalah ini ialah menggunakan kelayakan yang jelas, menghalang pertembungan ruang nama, dan memastikan fungsi atau objek yang dimaksudkan mengenal pasti langkah-langkah yang terlibat dalam menyelesaikan masalah ini.