0
votes

C ++: Accéder au membre privé Vector des Structs d'une autre classe

d'une question similiaire ici J'ai essayé la solution xxx

mais toujours obtenir une erreur: "Disactructeur" n'a pas été déclaré dans cette portée. Distructeur et Vec_A sont définis dans la section privée, sous la section publique, dans la même classe.

S'il vous plaît, pourriez-vous m'aider.

Cordialement, Thomas


4 commentaires

Merci de répondre. Ma compréhension était que les fonctions normalement publiques peuvent-elles accéder aux députés privés? Si je fais tout le datratégie, je peux utiliser A.Datretruc et n'a pas besoin d'une fonction pour l'accessoire?


Veuillez inclure un exemple de reproductible minimal . Le problème est dans le code que vous n'avez pas montré (ou plutôt dans le code que vous avez montré, Disactructeur n'est en effet pas défini)


Vous devez Modifier Votre question pour nous montrer un exemple de reproductible minimal . Veuillez également inclure une pâte de copie (en tant que texte) de la sortie de construction complète et complète. Et s'il vous plaît, prenez le temps de lire Les pages d'aide , prenez la Tour , lire Comment demander à , ainsi que Cette question de contrôle .


Ici, mon exemple est venu de, et je pensais que c'est juste ce dont j'ai besoin: Stackoverflow.com/questions/45479457/...


3 Réponses :


0
votes

Vous essayez de créer un vecteur du type de données «Disactructeur». Êtes-vous sûr de vous écrir de la classe / ou de la implémenter? Ce n'est peut-être qu'une variable. Vous savez que vous devez réellement mettre un type de données dedans comme Int, Bool, String. Il définit le type de données des variables spécifiques dans le vecteur.


0 commentaires

0
votes

Premièrement, la partie de déclaration du type de retour std :: vecteur nécessite un type complet dans ce contexte. C'est ce que cette erreur signifie. Le bloc de définition de classe peut attendre des identifiants et des signatures des membres, mais il ne peut pas rechercher la définition de type.

La classe A n'est pas complète avant son bras de fermeture. Conspétiquement, les classes imbriquées définies ne sont pas complètes avant la fermeture des accolades. La déclaration suivante est correcte one: xxx

dans n'importe quel autre cas que vous pourriez transmettre comme struct A :: Disamattruct .


4 commentaires

Une fois que le type apparaît dans un type de retour d'une méthode publique, il fait partie de l'interface publique (si le type est déclaré pour la première fois dans la section privée ou non).


Pourquoi puis-je utiliser Auto sur un type privé?


@ idclev463035818 Bon point, je suppose que j'étais habitué au compilateur brisé qui ne pouvait pas le faire (spécialement a ms unique, c'était un désordre de non-conformité avec "Tenter" d'accéder à un constructeur non trivial. Les compilateurs de MS anciens ont considéré toutes les classes. Avec héritage ou imbriquée à être non trivial par définition et déclaration "Auto x" nécessiterait un appel qu'il ne pouvait pas faire car "type n'est pas accessible").


Je n'étais pas au courant de cela depuis longtemps et c'était un choc quand j'ai découvert cela. A dû reconsidérer mon idée de ce qui est privé et ce qui est public complètement



1
votes

Je suppose que vous avez du code similaire à l'exemple suivant: xxx

Il a une erreur: xxx

car bar est privé dans foo . Cependant, cela ne signifie pas que vous ne pouvez pas l'utiliser en dehors de foo . Vous pouvez utiliser auto : xxx

ou déclinger : xxx < P> Vous ne pouvez pas accéder au nom DataType mais vous pouvez utiliser auto et vous pouvez obtenir un alias pour le type. Cela fonctionne également pour un std :: vecteur , seul un peu plus de chaudière serait nécessaire pour mettre la main sur DataType directement.


0 commentaires