IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

changer de place du code du main vers le code source.


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 33
    Points : 0
    Points
    0
    Par défaut changer de place du code du main vers le code source.
    Bonjour, après la lecture d'un article sur une autre site

    j'ai pensé que écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    QNetworkProxy proxy;
    proxy.setType(QNetworkProxy::HttpProxy); //Type de proxy
    proxy.setHostName("proxy.com"); //"Host" du proxy
    proxy.setPort(1080); //Port du proxy
    proxy.setUser("username"); //Facultatif
    proxy.setPassword("password"); //Facultatif
    Qui logiquement est rangé dans le main en raison de sa syntaxe pointographique et non fléchée, ferait mieux d'être écrit dans le .cpp.

    Mes preiers éssais se soldaient par ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ConnexionProxy::ConnexionProxy() : QWidget()
    {
        proxy->setType(QNetworkProxy::HttpProxy); // indique qu'il s'agisse d'un proxy web (fait par défaut).
        proxy->setHostName("proxy.com"); // donner l'url du site internet ou l'on envoit un proxy.
        proxy->setPort(1080); //remplacer la valeur par le quatrième tableau
    }
    avec dans le main :

    Ce qui ne peut évidemment pas fonctionner puisque un objet ne peut servir d'attribut.

    Merci.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Il te manque 2 notions. 3 puisque tu es en C++ : pas pointeur pointeur, référence

    De plus tu ne t’aperçois pas que dans ton code déplacé tu ne déclares même pas proxy.
    Comme si le compilateur va chercher un objet local pour compiler un constructeur

    Et ensuite il te manque la notion de classe. Puisque apparemment, proxy devient un attribut et non plus un objet local.

    À moins que tu crées un namespace [anonyme ou pas] pour en faire plus en moins un objet global.

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Bonsoir,
    Citation Envoyé par UnConfiantEtudiant Voir le message
    rangé dans le main en raison de sa syntaxe pointographique et non fléchée, ferait mieux d'être écrit dans le .cpp.
    Euh... quoi ?!?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 33
    Points : 0
    Points
    0
    Par défaut
    Proxy est ici déclaré en tant que objet dans le main. Ce qui évidemment ne marche pas puisque je l'utilise en tant qu'attribut donc oui je l'ai déclaré mais erronément. Je voulais faire comme dans un tuto d'un autre site.
    Toute la problématique réside dans l'ajout d'une classe et d'un objet supplémentaire.

    bousk : désolé pour le néologisme.

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Si tu montres le code en entier cela serait mieux, tu ne crois pas
    Sinon pourquoi rajouter une classe?

    Sinon dans ton fichier.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class ConnexionProxy: public QWidget {
    // ... All stuff here
     
     
    private: // or either protected or public
     
        QNetworkProxy proxy;
    };
    Sinon dans ton fichier.m (ou inline dans la définition de ta classe), avec la liste d'initialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ConnexionProxy::ConnexionProxy() :
        QWidget(), proxy(QNetworkProxy::HttpProxy, /*QString(*/"proxy.com"/*)*/, 1080) {
     
        // ... Constructor
    }

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 33
    Points : 0
    Points
    0
    Par défaut
    "Sinon dans ton fichier.m (ou inline dans la définition de ta classe), avec la liste d'initialisation



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    12345 ConnexionProxy::ConnexionProxy() :
        QWidget(), proxy(QNetworkProxy::HttpProxy, /*QString(*/"proxy.com"/*)*/, 1080) {
     
        // ... Constructor
    } "
    Pourquoi ne pas le mettre a l'interieur de la boucle ?

    Je pense que l'erreur se trouve ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QNetworkProxy proxy;
        //proxy.ConnexionProxy ne fonctionne pas;

    Comment appeler la méthode/ deuxième constructeur au cours du même programme ?

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Doctorant
    Inscrit en
    Novembre 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2012
    Messages : 15
    Points : 25
    Points
    25
    Par défaut
    Bonjour,

    J'ai du mal à comprendre ce que tu veux faire. Pourquoi veux-tu faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ConnexionProxy::ConnexionProxy() : QWidget()
    {
        proxy->setType(QNetworkProxy::HttpProxy); // indique qu'il s'agisse d'un proxy web (fait par défaut).
        proxy->setHostName("proxy.com"); // donner l'url du site internet ou l'on envoit un proxy.
        proxy->setPort(1080); //remplacer la valeur par le quatrième tableau
    }
    Au lieu de cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    QNetworkProxy proxy;
    proxy.setType(QNetworkProxy::HttpProxy); //Type de proxy
    proxy.setHostName("proxy.com"); //"Host" du proxy
    proxy.setPort(1080); //Port du proxy
    proxy.setUser("username"); //Facultatif
    proxy.setPassword("password"); //Facultatif
    Si c'est pour affecter les membres type, hostName et port d'une instance de classe QNetworkProxy réalisée ailleurs dans le code tu peux faire une méthode qui prend une référence de l'instance en question.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    #include <QNetworkProxy>
     
    class ProxyConnect
    {
    public:
    	static void setConnection(QNetworkProxy &proxy, ProxyType type = QNetworkProxy::HttpProxy, const QString &hostName = "proxy.com", quint16 port = 1080)
    	{
    		proxy.setType(type); // indique qu'il s'agisse d'un proxy web (fait par défaut).
    		proxy.setHostName(hostName); // donner l'url du site internet ou l'on envoit un proxy.
    		proxy.setPort(port); //remplacer la valeur par le quatrième tableau
    	}
    };
     
    int main(int argc, char *argv[])
    {
    	QNetworkProxy proxy;
    	ProxyConnect::setConnection(proxy);
    	return 0;
    }
    Je n'ai pas Qt d'installé je ne peux pas dire si le code proposé fonctionne.

    Par ailleurs :

    Ce qui ne peut évidemment pas fonctionner puisque un objet ne peut servir d'attribut.
    Qu'entends-tu par là ? Sans plus de détails j'aurais tendance à dire que tu te trompes lourdement.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par UnConfiantEtudiant Voir le message
    Pourquoi ne pas le mettre a l'interieur de la boucle ?
    Il te manque la notion de classe. C'est ce que j'ai dit.
    Pour ne pas initialiser 2 fois ton attribut

    Citation Envoyé par UnConfiantEtudiant Voir le message
    Comment appeler la méthode/ deuxième constructeur au cours du même programme ?
    Devines gros malin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #include<iostream>
     
     
    class Test
    {
    public:
     
        Test(int i = 0) { std::cout << "Test " << i << std::endl; }
    };
     
    int main()
    {
        Test test1;
        Test test2(5);
        Test* test3 = new Test;
        Test* test4 = new Test(5);
     
        Test test5[5];
     
        delete test3;
        delete test4;
     
        return 0;
    }

  9. #9
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par foetus Voir le message
    Pour ne pas initialiser 2 fois ton attribut
    Petite note en passant : c'est impossible d'initialiser deux fois la même chose (par définition). Tu peux l'affecter plusieurs fois par contre.

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 33
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Petite note en passant : c'est impossible d'initialiser deux fois la même chose (par définition). Tu peux l'affecter plusieurs fois par contre.
    Compris, faute de localiser l'erreur, voilà le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #ifndef MAFENETRE_H
    #define MAFENETRE_H
     
    #include <QPushButton>
     
    #include <QNetworkReply>
    #include <QNetworkAccessManager>
    #include <QNetworkRequest>
    #include <QUrl>
    #include <QNetworkProxy>
     
    #include <QtNetwork>
     
    class MaFenetre : public QWidget
    {
    public :
        MaFenetre();
        void ConnexionProxy();
    private :
    QPushButton *bouton;
    };
     
    class ConnexionProxy : public QWidget
    {
    public :
        ConnexionProxy();
    private :
    QNetworkProxy *proxy;
    };
     
    #endif // MAFENETRE_H


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    #include "MaFenetre.h"
     
    #include <QNetworkReply>
    #include <QNetworkAccessManager>
    #include <QNetworkRequest>
    #include <QUrl>
    #include <QNetworkProxy>
     
    #include <QtNetwork>
     
    MaFenetre::MaFenetre() : QWidget()
    {
    bouton = new QPushButton("GO !", this);
    bouton->show();
    }
     
    ConnexionProxy::ConnexionProxy() : QWidget()
    {
        proxy->setType(QNetworkProxy::HttpProxy); // indique qu'il s'agisse d'un proxy web (fait par défaut).
        proxy->setHostName("proxy.com"); // donner l'url du site internet ou l'on envoit un proxy.
        proxy->setPort(1080); //remplacer la valeur par le quatrième tableau
    }
     
    // ATTENTION !!! proxy est un objet !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #include <QPushButton>
    #include <QApplication>
     
    #include <QNetworkReply>
    #include <QNetworkAccessManager>
    #include <QNetworkRequest>
    #include <QUrl>
    #include <QNetworkProxy>
     
    #include <QtNetwork>
     
    #include "MaFenetre.h"
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        MaFenetre fenetre;
        fenetre.show();
     
        QNetworkProxy proxy;
        //ConnexionProxy();
     
     
     
     
        return app.exec();
    }
     
    //pour plus de professionalisme, faire une méthode permettant a l'utiliateur de commencé en appuyant sur un bouton.

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par Ehonn Voir le message
    Petite note en passant : c'est impossible d'initialiser deux fois la même chose (par définition). Tu peux l'affecter plusieurs fois par contre.
    Tu as raison, c'était pour le dire avec le moins de mots possible
    Donc
    • Dans le corps du constructeur, l'attribut va être défini et initialisé si le compilateur l'a décidé ou si c'est un objet, son constructeur par défaut est appelé. Et ensuite il faudra le modifier pour mettre les bonnes valeurs
    • Avec la liste d'initialisation, l'attribut va être défini et initialisé avec les bonnes valeurs


    C'est bon doc'

    Édit: Ehonn est joueur


    Citation Envoyé par UnConfiantEtudiant Voir le message
    voilà le code :
    C'est ce que j'avais dit: il te manque la notion de pointeur
    Tu sais la petite histoire avec new et delete.

    Parce que sinon c'est la même chose que mon bout de code, avec un attribut pointeur qui n'est pas justifié.

  12. #12
    Membre chevronné Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788
    Points : 2 160
    Points
    2 160
    Par défaut
    Citation Envoyé par foetus Voir le message
    l'attribut va être défini et initialisé à zéro
    Ça dépend du type. Pour les POD, le constructeur par défaut généré par le compilateur n'initialise pas à 0.

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 33
    Points : 0
    Points
    0
    Par défaut
    Bonjour, j'ai besoin de faire hériter une classe de plusieurs choses mais avant, je veux savoir si cette syntaxe est correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class MaFenetre : public QMainWindow, QWidget
    et dans le cas échéant comment la remplacer.

  14. #14
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Chaque classe héritée requiert son propre spécificateur de publicité.
    Par défaut, ce sera private.

    En l'occurence, class MaFenetre : public QMainWindow, /*rien*/ QWidget déclare une classe qui hérite publiquement de QMainWindow, mais privatement de QWidget.
    Ce que tu veux probablement, c'est class MaFenetre : public QMainWindow, public QWidget.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2014
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2014
    Messages : 33
    Points : 0
    Points
    0
    Par défaut
    Rebonjour, devrais-je écrire quelque chose comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    nomDeLaClasse* classePointee::méthodeDeLaClassePointee
    {
        return classePointee;
    }
    et dois-je initialiser les variables dans le constructeur ?

Discussions similaires

  1. Convertion code Delphi.net vers C#
    Par RamDevTeam dans le forum Delphi .NET
    Réponses: 1
    Dernier message: 31/03/2006, 21h08
  2. [VBA-W]changer de place un numero sur une page word
    Par benco dans le forum VBA Word
    Réponses: 1
    Dernier message: 26/03/2006, 12h37
  3. Changer de place le curseur
    Par CCin dans le forum C++
    Réponses: 4
    Dernier message: 01/11/2005, 19h10
  4. changer de place d'un texte avec WM_TIMER
    Par nasrij dans le forum MFC
    Réponses: 5
    Dernier message: 06/10/2005, 16h11
  5. [Linux]différence de code de windows vers unix sous eclipse
    Par skywalker3 dans le forum Eclipse Java
    Réponses: 6
    Dernier message: 05/01/2005, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo