bonjour
cella fait pas mal de temps que j'ai besoin d'utiliser la forward declarations mais petit problème je ne sait pas faire
pouvez vous m'expliquer? merci d'avance
bonjour
cella fait pas mal de temps que j'ai besoin d'utiliser la forward declarations mais petit problème je ne sait pas faire
pouvez vous m'expliquer? merci d'avance
Regarde sur les internets, il y a pleins d'explications ... mais je n'ai pas vu de cours sur developpez.net
C'est lorsque tu veux soit définir/ utiliser 1 variable (et non pas 1 pointeur) ou créer 1 container d'1 type que tu as créé (struct ou class) soit appeler 1 fonction, mais que ce type et/ou cette fonction n'a pas encore été défini.
Tu ne veux pas faire d'include définissant ce type/ cette fonction (parce que) ou alors tu ne peux pas faire d'include (à cause des includes circulaires) - alors la solution c'est la déclaration anticipée
Comme c'est 1 déclaration, tu n'as pas "le corps", juste l'"entête" :
Cela permet de dire au compilateur de patienter qu'il y a 1 type/ 1 fonction qui sera défini après son utilisation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // Forward Declarations struct s_XXX; class myClass; XXX func(/* ... */);
Le plus proche est cette entrée de FAQ
https://cpp.developpez.com/faq/cpp/?...-une-a-l-autre
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.
bonjour merci pour vautre aide je penser que la forward declarations fonctionnée comme l'héritage mais non il faut inclure uniquement les fonction d'on on a besoin
merci ca doit faire un mois que je cherche.
bonjour je reviens vers vous pour vous montrée des erreur que je me prend a la compilation je pense que c'est lier a la forward declaration voici une capture d'écran des problème
Bonjour,
Vous ne passez pas assez de paramètres à votre slot. Il indique que le signal et le slot ne sont pas compatibles (en nombres de paramètres).
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
ok je vais voir pour reglée ca
merci
bonjour
j'ai fait ca mais je ne comprend pas pourquoi ca ne marche pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class serveurprimaire : public MainWindow { struct seveursecondaire; seveursecondaire* conectsecondary(QString ip, int port); Q_OBJECT public: serveurprimaire(); public slots:
re donc on a ces forward declaration qui ne fonctionne pas voici les 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
32
33 #ifndef SERVEURPRIMAIRE_H #define SERVEURPRIMAIRE_H #include <QString> #include <QDateTime> #include <QTcpSocket> #include <QMessageBox> #include "mainwindow.h" //#include <QSound>- class serveurprimaire : public MainWindow { struct seveursecondaire; seveursecondaire* conectsecondary(QString ip, int port); Q_OBJECT public: serveurprimaire(); public slots: void conect(QString ip, int port); private slots: //fonctionement vitale du serveur void connected(); void desconected(); void Socketerror(QAbstractSocket::SocketError erreur); //fonctionement utilitaire du serveur void datarecevied(); void sent(QString message); void executerequest(QString request); private: quint16 tailleMessage; QTcpSocket *primarySocket; // Représente le serveur primaire }; #endif // SERVEURPRIMAIRE_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
26
27
28
29
30
31
32
33
34
35
36
37
38
39 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <string> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { struct serveurprimaire; struct seveursecondaire; Q_OBJECT public: seveursecondaire* sent(QString message); serveurprimaire* conect(QString ip, int port); Ui::MainWindow *ui; MainWindow(QWidget *parent = nullptr); ~MainWindow(); public slots: void playsound(); void flash(); void appendmessagelist(QString message); void conectLabelSetText(QString text); QString seepsedo(); private slots: void chatbot(QString request); void on_conectbuton_clicked(); void on_sentbuton_clicked(); void on_notificationsonore_clicked(bool checked); void on_notificationvisuelle_clicked(bool checked); }; #endif // MAINWINDOW_Hvoila si vous voyer le problème je suis preneur
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 #ifndef SEVEURSECONDAIRE_H #define SEVEURSECONDAIRE_H #include "serveurprimaire.h" class seveursecondaire : public serveurprimaire { public: seveursecondaire(); public slots: void sent(QString message); void conectsecondary(QString ip, int port); private slots: //fonctionement vitale du serveur void connected(); void desconected(); void Socketerror(QAbstractSocket::SocketError erreur); //fonctionement utilitaire du serveur void datarecevied(); private: QTcpSocket *secondarySocket; // Représente le serveur secondaire quint16 tailleMessage; }; #endif // SEVEURSECONDAIRE_H
Bonjour,
Sors ces déclarations des définitions des classes serveurprimaire et MainWindow pour les mettre avant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5structclass seveursecondaire; class serveurprimaire : public MainWindow { ...Sinon là, tu déclares deux classes imbriquées serveurprimaire::seveursecondaire et MainWindow::seveursecondaire indépendantes de la troisième que tu définis dans l'espace global.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6structclass serveurprimaire;structclass seveursecondaire; class MainWindow : public QMainWindow { ...
Dernière modification par Invité ; 18/03/2021 à 13h12.
bonjour quand je fais ça je me prends unps désolé de ne pas vous avoir répondu plus tôtwarning serveurprimaire.h:12: avertissement : 'serveurprimaire' defined as a class here but previously declared as a struct; this is valid, but may result in linker errors under the Microsoft C++ ABI
Ah effectivement j'avais pas prêté attention à ceci. C'est corrigé dans mon message précédent.
bonjour j'ai encore les erreur précédentes :
quelle bout de code je peut vous fournir pour que nous arrivions a résoudre le problème
oui mais normalement il me dit ou sont les erreur (un numéro de ligne)
je ne trouve pas ou son les erreur… help me
voici mes 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 class serveurprimaire; class seveursecondaire; QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: seveursecondaire* sent(QString message); serveurprimaire* conect(QString ip, int port);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class seveursecondaire; //#include <QSound>- class serveurprimaire : public MainWindow { Q_OBJECT public: seveursecondaire* conectsecondary(QString ip, int port); serveurprimaire(); public slots: void conect(QString ip, int port);vous voyer l'erreur ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class seveursecondaire : public serveurprimaire { public: seveursecondaire(); public slots: void sent(QString message); void conectsecondary(QString ip, int port);
il vous faut plus de code ?
Si tu as bien décortiqué nos messages et mon lien, tu devrais maintenant savoir que l'erreur se situe sur la connexion entre un signal et un slot. Or je ne vois rien de tel dans ce que tu montres .
Et pour avoir toutes les infos sur l'erreur de compilation, regarde plutôt l'onglet 4 Sortie de compilation. Le 1er 1 Problèmes n'est qu'un bref résumé.
bonjour voici mes slot
et les erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #include "serveurprimaire.h" serveurprimaire::serveurprimaire() { connect(primarySocket, &QTcpSocket::readyRead,this,&serveurprimaire::datarecevied); connect(primarySocket, &QTcpSocket::connected,this,&serveurprimaire::connected); connect(primarySocket, &QTcpSocket::disconnected,this,&serveurprimaire::desconected); connect(primarySocket, &QTcpSocket::error, this, &serveurprimaire::Socketerror); tailleMessage = 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 In file included from C:/Qt/6.0.1/mingw81_64/include/QtCore/qobjectdefs.h:49, from C:/Qt/6.0.1/mingw81_64/include/QtCore/qmetatype.h:54, from C:/Qt/6.0.1/mingw81_64/include/QtCore/qvariant.h:46, from C:/Qt/6.0.1/mingw81_64/include/QtCore/qlocale.h:43, from C:/Qt/6.0.1/mingw81_64/include/QtCore/qcalendar.h:46, from C:/Qt/6.0.1/mingw81_64/include/QtCore/qdatetime.h:47, from C:/Qt/6.0.1/mingw81_64/include/QtCore/QDateTime:1, from ..\..\..\4.0\client\client\serveurprimaire.h:4, from ..\..\..\4.0\client\client\serveurprimaire.cpp:1: C:/Qt/6.0.1/mingw81_64/include/QtCore/qobjectdefs_impl.h: In instantiation of
Ton message d'erreur est très loin d'être complet.
Elle est là ton erreur :
QTcpSocket::error n'est pas un signal, et ne fournit pas non plus de paramètre QAbstractSocket::SocketError attendu par serveurprimaire::Socketerror.
C'est void errorOccurred(QAbstractSocket::SocketError socketError) que tu cherches.
avec ca :ne change rien...
Code : Sélectionner tout - Visualiser dans une fenêtre à part connect(primarySocket, &QTcpSocket::errorOccurred, this, &serveurprimaire::Socketerror);
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager