J'essaie de réduire la redondance du code à l'aide de la surcharge d'un opérateur de sortie vers un flux au lieu de fonctions d'impression.
^
3 Réponses :
Vous avez surchargé Aussi vous voulez <<< / code> sur
MAINWND code> pas
MAINWND * code>. P>
* mainwind << qstring ("str"); code> p>
qstring const & code> p>
Et si je veux utiliser le pointeur encore? sans le "*" au début. C'est possible? Comment devrais-je changer la surcharge?
@Vlad, vous pouvez utiliser mainwind-> opérateur << (qstring ("str")); code>
@Vlad, c'est pourquoi vous devez utiliser * mainwind << ... code>
@Rsahu Pourriez-vous examiner les questions ajoutées à la question ci-dessus, où il est indiqué que le pointeur est attendu comme premier op.Il y a une surcharge de fonction, pas une méthode.
@Vlad, essayez de faire le deuxième argument qstring const & str code>.
@vlad poser une autre question en utilisant "Posez une question". Invalidation des réponses existantes aux questions valides est fronçée.
Vous devez utiliser En cela, je vous recommande fortement de changer la fonction et la mise en oeuvre sur p> qui vous permettra de chaîner l'opérateur. P> * mainwind . Le LHS doit être un objet, pas un pointeur.
pour renvoyer une référence à l'objet, pas un pointeur. P >
*mainWind << QString("str") << QString("Second string");
C'est bien, mais je dois travailler avec exactement le pointeur, mais la surcharge de fonction indiquée ci-dessus me donne un résultat similaire au passé.
@Vlad, en utilisant des pointeurs au lieu d'objets est un choix. Je suis sûr que ce n'est pas une exigence. A plus que les opérateurs <<< / code> ne sont pas idiomatiques. Juste quelque chose à penser.
//other.cpp version 2 MainWind *mainWind = new MainWind; *mainWind <<"str"; // this will work too *mainWind << "str" << "another str"; // note reliance on cleaning up mainWind to avoid a memory leak delete mainWind;
Beaucoup de texte a peu de sens ... Comment puis-je surcharger la fonction comme en plus de ma question?
Je voudrais utiliser le pointeur sans le "*". Par conséquent, je veux surcharger la fonction.
Votre exemple de surcharge de fonction Résultat Résultat Erreur: MainWind * MW = Nouveau Mainwind; mw << "str"; C'est pour votre dernière aperçu? Peut-être que je ne l'utilise pas correctement?
@vlad - Ouais, d'accord. J'ai oublié cette surcharge de l'opérateur global << () code> pour accepter les arguments du pointeur (comme le premier argument) n'est pas autorisé. Édité en conséquence. En bref: il n'y a pas de solution à votre condition.
Compilation du code de fonction (avec le premier paramètre que le pointeur) est le succès normal, cela signifie une erreur d'utilisation ... mais où? Mainwind * MW = nouveau main-d'œuvre principal; MW << "str"
La fonction peut compiler, cependant, il n'ya aucun moyen que cela puisse être appelé lors du fait de MW << "str" code>. S'il y a une version membre de
mainwind :: opérateur << () code> alors
* mw << "str" code> est implicitement traduit à un appel de quelque chose comme
( * MW) .Mainwind :: opérateur << ("str") code>. Toutefois, la norme spécifie aucune équivalence qui permet à ce que vous voulez. Tourner
MW << "str" code> dans un appel de n'importe quel
MAINWIND :: opérateur << () code>. En bref, vous essayez de faire quelque chose que la norme ne supporte pas / autoriser. Le plus proche que vous puissiez venir est le (moche)
mw-> opérateur << ("str") code> (c'est-à-dire que vous voulez que le compilateur fasse).
Le problème est que vous avez défini le
<<< / code> surcharger un
mainwind code> et l'opérande de gauche de ce
<<< / code> L'opérateur n'est pas un < Code> Mainwind code>. C'est un
mainwind * code>.