7
votes

AS3 TypeError: Erreur # 1007: Instanciation Tentative d'un non-constructeur

Pour une raison quelconque, je ne peux pas obtenir que cela fonctionne (du code fortement simplifié qui échoue): xxx

il compile, mais jette le premier accès de Someclass : xxx


0 commentaires

4 Réponses :


0
votes

Vous devez générer un constructeur et déclarer votre variable dans la classe, pas la fonction: xxx


5 commentaires

Intéressant ... Cela semble fonctionner, bien que cette approche signifie que vous devez instancier Someclass avant que le membre statique assistant est disponible. En outre, un peu bizarre d'initialiser un membre statique dans un constructeur d'instance. E.G., si vous créez plusieurs instances de Someclass , le membre statique sera réinitialisé à chaque fois ... pas ce que vous voulez. Un autre exemple, si vous avez une méthode statique à l'aide de Helper , il trouvera qu'il s'agira d'être null jusqu'à vous instanciez soméclass au moins une fois. Bizarre, pour dire le moins.


Vous ne devez pas instancier à l'intérieur du constructeur. Donc, vous ne l'écrasez pas chaque fois que vous parlez de soméclasse.


Mais lorsque vous instaniez le nouvel assistant (), vous appelez le constructeur de l'aide de la classe et c'est là que l'erreur se produit. Helper n'a pas de constructeur?


@ Wolv3R: Comme écrit, votre exemple provoquera la création d'un nouvel assistant sur chaque nouvelle instance de Somorclass, ce qui n'est sûrement pas souhaité avec une variable statique.


D'accord avec @Blanka, c'est très étrange et un anti-motif de bonafide, mais la raison pour laquelle le compilateur aime, c'est parce qu'il a eu la possibilité d'initialiser assistant avant que son constructeur soit appelé. @ Wolv3r, AS3 prend en charge la définition implicite et l'invocation des constructeurs de no-arg.



1
votes

Je pense que cela ne peut pas fonctionner avec l'aide et la somlasse dans le même fichier. Lorsque la somlasse est initialisée, la classe d'assistance n'a pas encore été initialisée, et un objet d'assistance ne peut donc pas être créé.

Déplacement de l'aide à un fichier séparé devrait résoudre le problème.


3 commentaires

Il a écrit que cet exemple est "Code fortement simplifié qui échoue". Je pense qu'il l'a dans deux fichiers séparés.


En fait, ils sont censés être dans le même dossier. @silyevsk, je pense que cela est en effet un problème d'ordre d'initialisation.


Il a dans le même fichier, c'est ainsi que vous créez un constructeur privé dans ActionScript



2
votes

L'erreur non constructeur est la méthode de distinction incroyable du compilateur "Vous avez appelé un constructeur pour une classe que je n'ai pas encore vue"; S'il s'agissait d'un peu plus intelligent, il pourrait vérifier le fichier (unité de compilation) pour les classes internes avant de se plaindre ... mehhh

Voir comme vous avez donné votre variable statique privé accès, évidemment, vous avez l'intention de Utilisez uniquement l'instance en interne vers Someclass ( hypothèse; pourrait être transmis comme une valeur de retour ).

La solution suivante aperçu du VAR STATIC au moment où la classe interne est initialisée, c'est-à-dire lorsque le (probablement implicite) helper.cinit () est invoqué, plutôt que someclass.cinit () lorsque Helper n'existe pas encore : xxx


0 commentaires

1
votes

+1 à Darren. Une autre option consiste à déplacer la classe en haut du fichier xxx


2 commentaires

Je n'avais aucune idée que vous pourriez faire cela. Je n'ai pas eu la chance de tester, mais si cela fonctionne, c'est ça.


C'est assez cool, moi aussi je n'avais aucune idée que vous pourriez faire cela. Cela dit, pour mon étui d'utilisation spécifique, je ne pense toujours pas que cela fonctionnerait (je dois le tester tbh) ... Le compilateur Flex devrait vraiment analyser tout le dossier avant de compiler quelque chose