6
votes

Erreur: a initialisateur mais type incomplet

J'ai le problème: a une initialisation mais un type incomplet tout en utilisant STRIT:

dans un fichier HPP: xxx

dans un fichier CPP: xxx

alors j'ai le problème:

Erreur: a initialisateur mais type incomplet

merci d'avance

c++

1 commentaires

Ne devriez-t-il pas être 'Struct A :: Videodt Test (1);'?


3 Réponses :


0
votes

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 struct videodtt code> est, puisque vous le définissez dans le fichier .cpp. p>

Pour résoudre l'erreur, vous devez définir le 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;
}


0 commentaires

5
votes

Je pense que le problème est que test () n'a pas accès à des types privés de .

Cela compile pour moi: xxx


1 commentaires

@ Joesy: J'ai d'abord mal interprété la question. Voir la réponse révisée.



3
votes

Dans votre fonction Test Vous déclarez un type local struct videodt , mais ne le définissez jamais. Pas sensiblement, le compilateur se plaint d'un objet de type incomplet étant initialisé. Fin de l'histoire.

Comment as-tu attendu que cela fonctionne? Si vous vouliez que votre déclaration utilise votre déclaration A :: videodt , vous devez utiliser le nom qualifié pour le type - A :: videodt - comme c'est ce que ce type est ce type appelé. Cependant, le code ne compilera de toute façon pas, car A :: videodt est privé dans A et test n'a pas accès à celui-ci.

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.


2 commentaires

Je doute vraiment que le test struct videodt (1); 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 struct , je pense que c'est interprété comme une déclaration d'un nouveau type - une locale. Non?