Erreur «Aucun constructeur par défaut approprié disponible» dans Visual C ++
Je ne l'obtenez pas. J'ai été à regarder le code, le code de trois heures et je ne vois pas le problème.
La classe je suis de la création, appelé TwoDayPackage est dérivée d'une classe appelée Paquet.
C'est la façon dont j'ai défini le constructeur:
TwoDayPackage(string, string, string, string, int, string, string, string, string, int, float, float, float);
C'est comment je mettre en œuvre le constructeur:
TwoDayPackage::TwoDayPackage(string sName, string sAddress, string sState, string sCountry, int sZIP, string rName, string rAddress, string rState, string rCountry, int rZIP, float weight, float cost, float flat)
{
Package::Package(sName, sAddress, sState, sCountry, sZIP, rName, rAddress, rState, rCountry, rZIP, weight, cost);
flatRate = flat;
}
C'est la façon dont je l'utilise dans ma fonction principale.
TwoDayPackage pack2(senderName, senderAddress, senderState, senderCountry, senderZIP, receipientName, receipientAddress, receipientState, receipientCountry, receipientZIP, weight, cost, flat);
Je sais que mon argument liste est assez longue, il ya une raison pour cela.
Merci.
source d'informationauteur chustar
Vous devez vous connecter pour publier un commentaire.
:
Un défaut ctor est celui qui peut être appelé sans arguments. Au moins avec ce code, vous n'en avez pas: un défaut ctor soit a la signature
ou chaque argument doit avoir un défaut.
Cela dit, Dirk point sur la syntaxe est correcte; si vous voulez appeler les parents des classes ctor, vous devez le faire après que le côlon.
@dirkgently expositions de la réponse de la droite de la syntaxe, mais nous allons le développer un peu. Vous avez deux classes
et puis vous venez de le définir
... mais qui ne fonctionne pas? Pourquoi? Fondamentalement, parce que ce que vous dites C++ n'a pas de sens: la
Package::Package
est juste de nommage de la superclasse, ctor et de ne rien faire avec elle. Vous pouvez créer un nouvel objet de la classe Package à l'aide de la nouveau opérateur,mais c'est toujours pas ce que vous voulez faire; ce que vous voulez est-à-dire C++ pour contruct le Paquet de pièces de TwoDayPackage l'aide que arg liste. Vous n'avez pas besoin d'avoir le nom pleinement qualifié, parce que le compilateur sait déjà que la classe parente.
Vous pourriez tout aussi bien affecter des valeurs à l'enfant ctor, mais c'est inefficace, car il rend le compilateur génère du code pour "plusieurs voyages pour le bien". C++ a une syntaxe spéciale où les initialiseurs d'après un deux-points, comme Dirk a montré.
Une chose: depuis que vous êtes tout simplement l'affectation d'un paramètre à plat de toute façon, vous pouvez dire
Vérifier cette section du C++ FAQ Lite pour plus d'.
La réponse est que de dirkgently. L'explication est la séquence d'initialisation en C++.
Lors de la construction d'une classe, toutes les classes de base sont d'abord construits. Si vous fournissez un appel au constructeur de la classe dans la liste d'initialisation, puis il va appeler le constructeur approprié. Si la classe de base n'apparaît pas dans la liste d'initialisation, puis il sera par défaut construit. Tout cela se passe avant entrer dans le constructeur de bloc (accolades).