Rumah > pembangunan bahagian belakang > C++ > Mengapa 'std::endl' Menyebabkan Ralat 'Jenis Tidak Diketahui' Apabila Melebihi `

Mengapa 'std::endl' Menyebabkan Ralat 'Jenis Tidak Diketahui' Apabila Melebihi `

Mary-Kate Olsen
Lepaskan: 2024-12-07 04:40:11
asal
943 orang telah melayarinya

Why Does

Mengatasi "std::endl is of Unknown Type" Ralat dalam Operator<< Beban berlebihan

Pembebanan operator ialah teknik yang berkuasa dalam C , membenarkan jenis data tersuai untuk menentukan tingkah laku mereka sendiri untuk pengendali seperti "<<". Walau bagaimanapun, apabila melebihkan operator "<<", isu boleh timbul apabila menggunakan "std::endl".

Punca ralat penyusunan apabila menggunakan "my_stream << endl" ialah " std::endl" ditakrifkan sebagai fungsi, bukan jenis data. Untuk menyelesaikan masalah ini, kita perlu memahami cara "std::cout" mengendalikan "std::endl".

Dalam "std::cout", pengendali "<<" dilaksanakan untuk menerima penunjuk fungsi dengan tandatangan yang sepadan sebagai "std::endl". Ini membolehkan "std::cout" memanggil fungsi dan memajukan nilai pulangan. Menggunakan konsep ini, kami boleh melaksanakan pendekatan yang serupa untuk strim tersuai kami "MyStream".

Melaksanakan Endl Tersuai untuk "MyStream"

Perkenalkan fungsi ahli baharu bernama " endl" ke dalam "MyStream" dengan tandatangan yang sama seperti operator "<<". Dalam "MyStream::endl", kami boleh melakukan operasi tersuai khusus untuk strim kami, seperti mencetak baris baharu.

Tandatangan Talian Akhir Standard Padanan

Untuk menyokong "std ::endl", kita mesti mentakrifkan satu lagi "pengendali<<" yang menerima penunjuk fungsi yang sepadan dengan tandatangan "std::cout::endl". Ini membolehkan kami memanggil "std::endl" terus daripada "MyStream" sambil memajukan nilai pulangannya dengan lancar.

Kod Contoh:

#include ;

struct MyStream {
// ... (same as previous code)

// MyStream's custom endl
static MyStream& endl(MyStream& stream) {
// ... (same as previous code)
}

// Operator<< to accept std::endl
MyStream& operator<<(StandardEndLine manip) {
// ... (same as previous code)
}
};

int main(void) {
MyStream stream;

// ... (same as previous code)
stream << MyStream::endl; // Call custom endl
stream << std::endl; // Call std::endl directly

return 0;
}

Dengan melaksanakan ini kaedah, kita kini boleh menggunakan "my_stream << endl" tanpa menghadapi ralat penyusunan. Ingat, memahami pelaksanaan asas "std::endl" adalah penting apabila menyesuaikan operator "<<" untuk kelas aliran anda sendiri.

Atas ialah kandungan terperinci Mengapa 'std::endl' Menyebabkan Ralat 'Jenis Tidak Diketahui' Apabila Melebihi `. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan