Le problème #include
class widget { }; class fubar : public widget { // 1 void value_parameter(widget); // 2 void ref_parameter(widget &); // 3 void ptr_parameter(widget *); // 4 virtual void value_parameter(widget); // 5 virtual void ref_parameter(widget &); // 6 virtual void ptr_parameter(widget *); // 7 widget value_return(); // 8 widget & ref_return(); // 9 widget * ptr_return(); // 10 widget instance_value_member; // 11 widget & instance_ref_member; // 12 widget * instance_ptr_member; // 13 static widget static_value_member; // 14 static widget & static_ref_member; // 15 static widget * static_ptr_member; // 16 };
3 Réponses :
aucun. p>
Cela aurait été une question différente si vous avez écrit widget de classe {}; code> définit un type complet em>. p>
widget de classe; code> i.e. a déclaration de classe avant em>. Ensuite, étant donné que vous auriez besoin d'un type EM> en raison de l'héritage, il n'y aurait plus
#include code> nécessaire pour les fonctions. P>
Je soupçonne que c'était purement exposé, même si je concède que la question n'était pas bien encadrée.
@LightnessRacsinorbit: Vous devez répondre à ce qui est demandé. Methinks "Cela aurait été une question différente" montre une initiative suffisante de ma part ;-)
Définition complète de Les déclarations avant sont suffisantes pour les autres. P> widget code> est requis pour: p>
# 1 code> (
Classe FUBAR: widget public code>), nous avons besoin de définition de la classe de base. Li>
# 11 code> (
instance widget_value_member; code>), nous avons besoin de définition de membre. Li>
ul>
Qu'en est-il de # 8? # 14?
@LightnessRacesinorbit C'est une déclaration non une définition. :) Cela peut avoir un type incomplet.
@LighessRacksinorbit Yup, cela m'a surpris trop récemment. Il semble qu'une définition complète ne soit nécessaire que lorsqu'elle affecte la taille d'une instance de la classe. J'imagine que tout le reste reste à la liaison.
Je pense que vous voulez dire une déclaration avant au lieu de la définition p> dans ce cas la première ligne d'en-tête de la classe Déclaration P> void value_parameter(widget); // 2
void ref_parameter(widget &); // 3
void ptr_parameter(widget *); // 4
virtual void value_parameter(widget); // 5
virtual void ref_parameter(widget &); // 6
virtual void ptr_parameter(widget *); // 7
@ Jarod42 En général, le compilateur ne peut pas sélectionner une fonction selon laquelle son paramètre est une référence ou non.
@ Jarod42 oh, je n'ai pas vu ça. :)
Quelles lignes pensez-vous que c'est et pourquoi?
Le code implique
widget code> est fourni juste avant
FUBAR code>, mais le reste du texte de la question implique le contraire. Si c'est le premier cas, vous n'avez pas besoin du
#include code> pour l'un des membres (
widget code> est déjà fourni). Si c'est la seconde, juste le fait que vous héritez de
widget code> signifie que vous avez besoin du
#include code> quel que soit le reste de la définition code> FUBAR code>.
@Sergio Legaz Ruiz Vous avez oublié de marquer cette classe de ligne FUBAR: widget public {.. :)
Bienvenue à Stackoverflow! Veuillez choisir un titre plus descriptif; Le titre est peu susceptible d'aider un futur visiteur.
.... pour le mettre gentiment