J'ai le problème: a une initialisation mais un type incomplet tout en utilisant STRIT:
dans un fichier HPP: p> dans un fichier CPP: p> alors j'ai le problème: p> Erreur: a initialisateur mais type incomplet p> merci d'avance p> p>
3 Réponses :
Lorsque le compilateur traite le fichier .HPP, il doit déduire l'empreinte de la mémoire et la mise en page de la classe A. Pour cette raison, il doit connaître la mise en page de la mémoire de struct videodt.
L'erreur est le compilateur qui se plaint Il ne sait pas ce que Pour résoudre l'erreur, vous devez définir le struct videodtt code> est, puisque vous le définissez dans le fichier .cpp. p> struct code> dans un fichier .HPP qui est inclus avant votre original .HPP. Vous pouvez également utiliser le PIMPL Idiom et modifier Classe A CODE> TO: P> class A
{
private:
struct videoDT* pVideoDT;
}
Je pense que le problème est que Cela compile pour moi: p> test () code> n'a pas accès à des types privés code> de code>.
@ Joesy: J'ai d'abord mal interprété la question. Voir la réponse révisée.
Dans votre fonction Comment as-tu attendu que cela fonctionne? Si vous vouliez que votre déclaration utilise votre déclaration En d'autres termes, il est difficile de comprendre ce que vous essayiez de faire. Fournir des explications ou du code qui ont plus de sens. P> Test code> Vous déclarez un type local struct videodt code>, mais ne le définissez jamais. Pas sensiblement, le compilateur se plaint d'un objet de type incomplet étant initialisé. Fin de l'histoire. P>
A :: videodt code>, vous devez utiliser le nom qualifié pour le type - A :: videodt code> - comme c'est ce que ce type est ce type appelé. Cependant, le code ne compilera de toute façon pas, car A :: videodt code> est privé dans A code> et test code> n'a pas accès à celui-ci. P >
Je doute vraiment que le test struct videodt (1); code> pourrait être analysé comme une déclaration de type.
@SBI: Dans les situations Lorsque le nom de la recherche ne trouve pas une déclaration précédente pour le type code> struct code>, je pense que c'est interprété comme une déclaration d'un nouveau type - une locale. Non?
Ne devriez-t-il pas être 'Struct A :: Videodt Test (1);'?