Probleme avec un code.

Hi,


 


Je suis nouveau sur le forum, et aussi dans la programation.


J'espere que vous pourrez m'aider avec un code qui m'empeche de finire mon app.


 


Dans mon app il y a plusieurs calcul qui son effectuer, mes un seul me pose des problemes.


 


Le calcule fonctionne tres bien avec "Commande Line Tool" dans Xcode. Mes dans IOS application je me retrouve avec des messages d erreurs. La seul modification qui je pense me pose des problemes se sont les curly brase( { } ) que j ais mie aux debut et a la fin. Mes a la foie sans elle j ais quand meme des message d'erreurs.


J'ais fais des recherches mes je n arrive toujours pas a comprendre.


 


Merci pour votre aide


 


 


1.PNG 42.1K

Réponses

  • AliGatorAliGator Membre, Modérateur
    Hello,

    Merci d'aller te présenter dans la section "Présentation des membres" pour nous en dire un peu + sur toi, en particulier ton niveau (années d'expérience en prog en général, en POO, en ObjC, formation, ...) histoire que l'on puisse adapter nos réponses à  ton niveau.
    Genre ton "Je suis nouveau dans la prog" ça ne nous dis pas depuis combien de temps tu apprends iOS, si tu as suivi une formation, un tuto, ou autre), donc ta présentation dans le forum dédié nous permettra de mieux cibler notre réponse.

    Là  par exemple vu ta question alors que l'erreur remontée ("Function definition is not allowed here") est parfaitement explicite, du coup notre réponse va être totalement différente selon ton niveau et ce que tu connais comme bases en ObjC



    Merci également de choisir un meilleur titre pour le sujet de ton post. "Problème avec un code" c'est bien trop générique, ça pourrait être le titre de 99% des posts du forum. C'est pas comme ça que ça va donner envie aux gens de lire ta question, ni aider plus tard pour la recherche d'anciens sujets dans le forum par mots clés.
  • CéroceCéroce Membre, Modérateur
    Totalement d'accord avec Ali.
    Pour répondre à  ta question, une fonction ne peut pas être définie à  l'intérieur d'une autre fonction en ObjC.
    Sors les fonctions MyCos() et main() de la méthode -[Enter:] et ça devrait compiler.

    Par ailleurs, il ne doit y avoir qu'une seule fonction main(), puisqu'il s'agit du point d'entrée dans le programme. Tu dois déjà  en avoir une fonction main() ailleurs.

    Ceci indique de grosses lacunes en programmation; j'ai bien compris que tu débutais, mais justement, la programmation iOS n'est pas pour les débutants. Je te conseille de faire tes armes avec d'autres langages pour commencer (par ex. Python).
  • Plus simplement, achète un livre pour débutant, du genre ".. pour les nuls".
  • Desoler pour mon manque de politesse.


    Faite moi savoir si vous voulez que je recreer un nouveau topic car je n ais pas reussie a changer le titre de ce topic.


     


    Ceroce, j ais essayer se que tu m as dit, mes sa ne marche pas vraiment.


    la ligne avec "return cos" a besoin de la definition degrees qui se trouve avec "double Mycos"


     


    J'ais bien regarder je n'ais pas vue d'autre ''int main()'' a l exception de celui de dans mon code.

  • CéroceCéroce Membre, Modérateur

    Ceroce, j ais essayer se que tu m as dit, mes sa ne marche pas vraiment.
    la ligne avec "return cos" a besoin de la definition degrees qui se trouve avec "double Mycos"

    'degrees' est un paramètre de la fonction MyCos(), il est donc tout à  fait accessible à  la fonction. Note que normalement, une fonction est:
    1) définie par son prototype dans un fichier .h. Exemple:


    /* Conversion.h */

    double MyCos(double degrees); // Prototype de la fonction

    2) implémentée dans un .m


    /* Conversion.m */

    double MyCos(double degrees) {
    double radians = (M_PI/180.0)*degrees;
    return cos(radians);
    }


    J'ais bien regarder je n'ais pas vue d'autre ''int main()'' a l exception de celui de dans mon code.

    Dans une appli iOS, la fonction main() se trouve dans le fichier main.m. Regarde à  nouveau ;-)
  • Joanna CarterJoanna Carter Membre, Modérateur
    août 2014 modifié #7

    Si je peux te donner quelques astuces...


     


    1. Si tu voulais faire les calculs comme degreesToRadians et radiansToDegrees, il vaudrait mieux de nommer les fonctions plus convenablement que MyCos. Un tel nom ne dit rien de la vrai fonctionnalité et, en plus, en Objective-C, il y a les moyens d'écrire les petites fonctions, que l'on puisse réutiliser, comme macros.


     


    Par ex.



    #define degreesToRadians(x) (M_PI * x / 180.0)

    #define radiansToDegrees(x) (x * 180.0 / M_PI)

    Du coup, en les mettant dans un fichier commun, tu pourrais les appeler comme :



    double facteur = radiansToDegrees(angle);

    2. Dans ton code, essaies d'utiliser les noms plus convenable, même pour les variables temporaires.


     


    Par ex.



    double directionDeVent = self.windFromTextField.text.doubleValue;

    NSUInteger forceDeVent = self.windSpeedTextField.text.integerValue;

    ...

    3. Ne mélanges pas les types dans les calculs sans en tenant compte du manque de précision, surtout en assignant les doubles aux floats.


     


    4. Essaies d'apprendre la syntaxe Objective-C 2.0 avec les propriétés que l'on puisse écrire sans les crochets - c'est plus facile a lire est il discrimine mieux entre les données et les méthodes.


  • Ok j ais trouver le mail (), donc j ais suprimer le int main() de mon calcul.


     


    Tu parlais de "conversion.h and .m" je suppose que tu parlais de ViewController.h et .m? Si s est le cas je ne comprend pas trop qu'est ce que double MyCos (double degrees) fais dans VC.h . Pour moi cette partie etais reserver pour les objects de la Storyboard.


     


    J'ais essayer d effectuer les modification que tu m as donner, mes je me retrouve avec deux autre problemes.


    Premierement: Je ne sais pas vraiment comment organiser les curlyBraces, car je me retrouve avec deux set de {} et une function definition et undeclared identifier erreur. Donc j ais enlever les {} que tu as mies dans l'exemple.


    La deuxieme; est j ais undeclared identifier pour "degrees". Je pense comprendre pourqu oi, mes je n arrive pas a reglet le probleme.

  • En tant que débutant en programmation tu devrais jeter un oe“il sur Swift. C'est plus simple que l'Objective-C et c'est un langage d'avenir.
  • @Draken


    Arrête le Perrier-Citron, tu ne supportes pas!


    Swift n'est pas plus simple, sauf peut être pour notre référence documentaire (Aligator). Pour le commun des mortels, Swift c'est différent et c'est à  apprendre. Ceux qui connaissent Objective-C apprendront probablement un peu plus vite, mais ça s'arrête là .


    D'autre part et si j'ai bien compris, Swift n'est pas vraiment finalisé.


  • AliGatorAliGator Membre, Modérateur
    Oui sauf que la lagafe ne connaà®t pas Swift mais ne connais pas non plus l'Objective-C, ni le C...


    Vu son niveau débutant je lui conseillerai de prendre des cours et lire des bouquins spécialisés car là  il manque les bases et ça le bloque toutes les 2 minutes. Tant qu'il n'aura pas les bases en programmation (Objective-C ou Swift ou C) il va galérer. On ne construit pas une maison si on n'a pas les bases en maçonnerie.
  • Apprendre la programmation de nos jours en commençant par le C, c'est comme construire une maison en apprenant à  fabriquer des briques, plutôt que de les acheter en gros !
  • AliGatorAliGator Membre, Modérateur
    Je suis d'accord, mais vouloir faire une application Objective-C sans connaitre les rudiments du langage c'est comme poser les briques sans les cimenter entre elles.
  • D'où intérêt de Swift pour un novice en programmation !
  • tabliertablier Membre
    août 2014 modifié #15

    D'où intérêt de Swift pour un novice en programmation !



    Tu donnes l'impression de vouloir dire: avec swift c'est l'avenir, rien à  apprendre!  Si c'est cela, c'est à  mon avis une erreur.


    Et il n'est pas forcément mauvais de savoir comment sont faites les briques, même si on les achète par palette et qu'on ne les fait pas soi-même.


  • AliGatorAliGator Membre, Modérateur

    D'où intérêt de Swift pour un novice en programmation !

    On serait début 2015, je serais d'accord avec toi.

    Mais là  Swift n'est pas encore mature, le langage lui-même change entre chaque beta, le compilateur n'est pas encore stable, et il y a encore assez intensivement besoin du bridging avant que toutes les APIs soient portées nativement, donc il faut quand même idéalement avoir un peu de connaissances ObjC.

    Pour quelqu'un qui sait déjà  programmer, et n'a pas peur du fait qu'il faut encore faire du bridging entre Swift et ObjC, pas de soucis. Pour quelqu'un qui n'y connais rien à  la programmation et se mélange déjà  avec les bases, comme le main, la syntaxe de base, les accolades, ... je ne suis pas sûr que ça soit une bonne idée. C'est prometteur, mais trop jeune pour que ça soit abordable pour un novice qui n'a aucun background POO alors qu'il y a encore quelques dépendances et notions liées à  ObjC.

    Car aujourd'hui faire une application 100% Swift, sans rien connaà®tre d'ObjC c'est encore un peu tôt. Le problème majeur étant que le compilateur, le langage et l'ABI n'étant toujours pas stable, s'il y a des erreurs le novice ne saura pas distinguer si c'est de sa faute ou si c'est parce que le compilateur est encore en beta. Il aurait le niveau je ne dis pas, mais là  vu les questions, il faut déjà  se faire aux bases avant d'essayer d'aller plus loin.
  • AliGatorAliGator Membre, Modérateur
    août 2014 modifié #17

    D'où intérêt de Swift pour un novice en programmation !

    Tu penses croire que faire du Swift c'est poser des préfabriqués au lieu de construire la maison.
    Alors que ça consiste toujours à  construire une maison, juste avec des nouveaux matériaux, genre avec des briques différentes et pour lesquelles le ciment n'est pas encore parfaitement au point et un peu glissant. Si la maison s'écroule, le novice ne saura pas dire si c'est parce que le ciment est encore pas assez expérimenté et sûr ou si c'est parce qu'il a mal assemblé les briques. Et en plus à  un moment il va falloir qu'il mélange les briques et le ciment Swift avec les briques et le ciment ObjC, donc double apprentissage.

    Tant que Swift n'est pas autonome, sorti de sa beta, et mature, ce n'est pas le plus adapté pour un débutant que de lui conseiller qqch encore en Beta, pour lesquels il y a bien moins de tutos, et qui n'est pas encore stable. Certes c'est tentant, mais c'est aussi dangereux, c'est pas comme s'il savait déjà  programmer en POO et avait déjà  les bons réflexes, si tu rajoutes la difficulté du côté beta de Swift ça risque d'embrouiller les choses.
  • Rendez-vous en Janvier 2015, alors !
  • CéroceCéroce Membre, Modérateur
    août 2014 modifié #19

    En tant que débutant en programmation tu devrais jeter un oe“il sur Swift. C'est plus simple que l'Objective-C

    Je ne suis pas d'accord. Certes on n'a pas les concepts de bas niveau du C, mais il y a pas mal de notions qui ne sont pas simples même pour nous; je pense à  tout ce qui est programmation fonctionnelle en particulier.
     

    et c'est un langage d'avenir.

    Nous sommes bien d'accord, mais franchement, je ne sais pas si tu as pu récupérer un Mac récent et te remettre à  programmer. Parce que dans les faits, Swift, c'est surtout expérimental actuellement.
  • Non, ça n'avance pas. Je suis bloqué jusqu'à  fin Novembre. J'ai hâte de m'y remettre.
Connectez-vous ou Inscrivez-vous pour répondre.