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
854 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!

sumber:php.cn
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