Maison > développement back-end > C++ > Pourquoi 'std::endl' provoque-t-il une erreur 'Type inconnu' lors de la surcharge du `

Pourquoi 'std::endl' provoque-t-il une erreur 'Type inconnu' lors de la surcharge du `

Mary-Kate Olsen
Libérer: 2024-12-07 04:40:11
original
854 Les gens l'ont consulté

Why Does

Surmonter l'erreur "std::endl est de type inconnu" dans l'opérateur<< Surcharge

La surcharge d'opérateurs est une technique puissante en C , permettant aux types de données personnalisés de définir leur propre comportement pour les opérateurs comme "<<". Cependant, lors de la surcharge de l'opérateur "<<", des problèmes peuvent survenir lors de l'utilisation de "std::endl".

La cause première de l'erreur de compilation lors de l'utilisation de "my_stream << endl" est que " std::endl" est défini comme une fonction et non comme un type de données. Pour résoudre ce problème, nous devons comprendre comment "std::cout" gère "std::endl".

Dans "std::cout", l'opérateur "<<" est implémenté pour accepter un pointeur de fonction avec une signature correspondante comme "std::endl". Cela permet à "std::cout" d'appeler la fonction et de transmettre la valeur de retour. En utilisant ce concept, nous pouvons implémenter une approche similaire pour notre flux personnalisé "MyStream".

Implémentation d'une fin personnalisée pour "MyStream"

Introduire une nouvelle fonction membre nommée " endl" dans "MyStream" avec la même signature que l'opérateur "<<". Dans "MyStream::endl", nous pouvons effectuer des opérations personnalisées spécifiques à notre flux, telles que l'impression d'une nouvelle ligne.

Signature de fin de ligne standard correspondante

Pour prendre en charge "std ::endl", nous devons définir un autre "opérateur<<" qui accepte un pointeur de fonction correspondant à la signature de "std::cout::endl". Cela nous permet d'appeler "std::endl" directement depuis "MyStream" tout en transmettant de manière transparente sa valeur de retour.

Exemple de code :

#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;
}

En implémentant ces méthodes, nous pouvons désormais utiliser "my_stream << endl" sans rencontrer l'erreur de compilation. N'oubliez pas qu'il est crucial de comprendre l'implémentation sous-jacente de "std::endl" lors de la personnalisation de l'opérateur "<<" pour vos propres cours en streaming.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal