CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

C++ probleme de compilation et autre

Six-One
Six-One
Niveau 10
01 février 2011 à 13:58:51

Bonjour à tous! :-)

Je tiens tout d'abord avant de me lancer à preciser que je suis un Neophite (un vrai de vrai) avec le langage C++

Mon probleme j'ai un projet à realiser mais pour cela j'ai besoin de créer une nouvelle classe. Ne m'y connaissant pas j'ai fait quelques recherches et de ces recherches ont découlés trois fichiers un '.h' un '.c' et un autre (le main) dans lequel j'inclus la classe et essaie de la tester.

Le pb lors de la compilation j'ai plein d'erreurs que je ne saurais expliquer....

Je vous copie donc ci-dessous les contenus des fichiers et la liste d'erreurs affichées:

header fichier '.h'

  1. ifndef Cplx
  2. define Cplx

class Cplx{
private:
// attributs
private float reel;
private float im;

public:
//Methodes
Cplx(float r, float i);
float PartReelle();
float PartIm();
void Conj();
void C_Somme(Cplx a, Cplx b);
void C_Somme_float (Cplx a, float b);
void C_Diff (Cplx a, Cplx b);
void C_Diff_float (Cplx a, float b);
void C_Produit(Cplx a, Cplx b);
void C_Produit_float (Cplx a, float b);
void C_Inv();
void C_Div (Cplx a, Clpx b);
void C_Div_float (Cplx a, float b)
};

  1. endif

____________________________________________
____________________________________________

Fichier '.C'

  1. include <iostream>
  2. include <math.h>
  3. include "Clpx.h"

public class Cplx {
// attributs
private float reel;
private float im;

// constructeur
public Cplx(float r, float i){
reel =r;
im = i;
}

// accesseurs aux attributs

public float PartReelle(){
return reel;
}

public float PartIm(){
return im;
}

//operation sur les complexes

public void Conj(){
im=-im;
}

public void C_Somme(Cplx a, Cplx b){
reel= a.PartReelle + b.PartReelle;
im = a.PartIm + b.PartIm;
}
public void C_Somme_float (Cplx a, float b){
reel= a.PartReelle + b;
}
public void C_Diff (Cplx a, Cplx b){
reel= a.PartReelle - b.PartReelle.b;
im = a.PartIm - b.PartIm;
}
public void C_Diff_float (Cplx a, float b){
reel= a.PartReelle - b;
}

public void C_Produit(Cplx a, Cplx b){
reel= a.PartReelle*b.PartReelle - a.PartIm + b.PartIm;
im = a.PartReelle*b.PartIm + a.PartIm + b.PartReelle;
}
public void C_Produit_float (Cplx a, float b){
reel= a.PartReelle*b;
im = a.PartIm*b;
}
public void C_Inv(){
reel= reel/(pow(reel,2) + pow(im,2));
im = im/(pow(reel,2) + pow(im,2));
}
public void C_Div (Cplx a, Clpx b){
C_Produit(a , b.C_Inv);
}
public void C_Div_float (
Cplx a, float b){ reel= (a.PartReelle)/b;
im = (a.PartIm)/b;
}

___________________________________________
___________________________________________

fichier main (.C)

  1. include <iostream>
  2. include <math.h>
  3. include <Clpx.h>

int main ()
{
Clpx A =new Clpx(12,4);
A.PartReelle;
A.PartIm;
A.conj;
A.PartReelle;
A.PartIm;
C_Somme(A,A.conj);
C_Somme_float(A,2);

return 0;
}

__________________________________________
__________________________________________

erreurs:

1>------ Début de la génération : Projet : test_class, Configuration : Debug Win32 ------
1> Clpx.cpp
1>Clpx.cpp(1): warning C4627: '#include <iostream>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
1> Ajoutez la directive à 'StdAfx.h' ou régénérez l'en-tête précompilé
1>Clpx.cpp(2): warning C4627: '#include <math.h>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
1> Ajoutez la directive à 'StdAfx.h' ou régénérez l'en-tête précompilé

1>c:\users\mouyabi\desktop\cours\2010-2011\tp_info
\tp3\test_class\test_class\Clpx.h(8): error C2144: erreur de syntaxe : 'float' doit être précédé de ':'

1>c:\users\mouyabi\desktop\cours\2010-2011\tp_info
\tp3\test_class\test_class\Clpx.h(9): error C2144: erreur de syntaxe : 'float' doit être précédé de ':'

1>c:\users\mouyabi\desktop\cours\2010-2011\tp_info
\tp3\test_class\test_class\Clpx.h(14): error C4430: spécificateur de type manquant - int est pris en compte par défaut. Remarque : C++ ne prend pas en charge int par défaut

1>c:\users\mouyabi\desktop\cours\2010-2011\tp_info
\tp3\test_class\test_class\Clpx.h(14): warning C4183: 'Cplx' : type de retour manquant ; fonction membre retournant 'int' prise par défaut

1>c:\users\mouyabi\desktop\cours\2010-2011\tp_info
\tp3\test_class\test_class\Clpx.h(18): error C2061: erreur de syntaxe : identificateur 'Cplx'

1>c:\users\mouyabi\desktop\cours\2010-2011\tp_info
\tp3\test_class\test_class\Clpx.h(19): error C2061: erreur de syntaxe : identificateur 'Cplx'

1>c:\users\mouyabi\desktop\cours\2010-2011\tp_info
\tp3\test_class\test_class\Clpx.h(20): error C2061: erreur de syntaxe : identificateur 'Cplx'

1>c:\users\mouyabi\desktop\cours\2010-2011\tp_info
\tp3\test_class\test_class\Clpx.h(21): error C2061: erreur de syntaxe : identificateur 'Cplx'

1>c:\users\mouyabi\desktop\cours\2010-2011\tp_info
\tp3\test_class\test_class\Clpx.h(22): error C2061: erreur de syntaxe : identificateur 'Cplx'

1>c:\users\mouyabi\desktop\cours\2010-2011\tp_info
\tp3\test_class\test_class\Clpx.h(23): error C2061: erreur de syntaxe : identificateur 'Cplx'

1>c:\users\mouyabi\desktop\cours\2010-2011\tp_info
\tp3\test_class\test_class\Clpx.h(25): error C2061: erreur de syntaxe : identificateur 'Cplx'

1>c:\users\mouyabi\desktop\cours\2010-2011\tp_info
\tp3\test_class\test_class\Clpx.h(26): error C2061: erreur de syntaxe : identificateur 'Cplx'
1>Clpx.cpp(10): error C2144: erreur de syntaxe : 'float' doit être précédé de ':'
1>Clpx.cpp(11): error C2144: erreur de syntaxe : 'float' doit être précédé de ':'
1>Clpx.cpp(14): error C2144: erreur de syntaxe : 'Cplx' doit être précédé de ':'
1>Clpx.cpp(19): error C2144: erreur de syntaxe : 'float' doit être précédé de ':'
1>Clpx.cpp(23): error C2144: erreur de syntaxe : 'float' doit être précédé de ':'
1>Clpx.cpp(29): error C2144: erreur de syntaxe : 'void' doit être précédé de ':'
1>Clpx.cpp(33): error C2144: erreur de syntaxe : 'void' doit être précédé de ':'
1>Clpx.cpp(37): error C2144: erreur de syntaxe : 'void' doit être précédé de ':'
1>Clpx.cpp(40): error C2144: erreur de syntaxe : 'void' doit être précédé de ':'
1>Clpx.cpp(44): error C2144: erreur de syntaxe : 'void' doit être précédé de ':'
1>Clpx.cpp(48): error C2144: erreur de syntaxe : 'void' doit être précédé de ':'
1>Clpx.cpp(52): error C2144: erreur de syntaxe : 'void' doit être précédé de ':'
1>Clpx.cpp(56): error C2144: erreur de syntaxe : 'void' doit être précédé de ':'
1>Clpx.cpp(60): error C2144: erreur de syntaxe : 'void' doit être précédé de ':'
1>Clpx.cpp(63): error C2144: erreur de syntaxe : 'void' doit être précédé de ':'
1>Clpx.cpp(67): fatal error C1075: fin de fichier rencontrée avant que l'élément accolade '{' gauche de 'Clpx.cpp(8)' soit équilibré
1> test_class_Cplx.cpp
1>test_class_Cplx.cpp(1): warning C4627: '#include <iostream>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
1> Ajoutez la directive à 'StdAfx.h' ou régénérez l'en-tête précompilé
1>test_class_Cplx.cpp(2): warning C4627: '#include <math.h>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
1> Ajoutez la directive à 'StdAfx.h' ou régénérez l'en-tête précompilé
1>test_class_Cplx.cpp(3): warning C4627: '#include <Clpx.h>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
1> Ajoutez la directive à 'StdAfx.h' ou régénérez l'en-tête précompilé
1>test_class_Cplx.cpp(4): warning C4627: '#include <math.h>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
1> Ajoutez la directive à 'StdAfx.h' ou régénérez l'en-tête précompilé
1>test_class_Cplx.cpp(19): fatal error C1010: fin de fichier inattendue lors de la recherche d'un en-tête précompilé. N'auriez-vous pas oublié d'ajouter '#include "StdAfx.h"' à votre source ?
1> Génération de code en cours...
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

___________________________________
___________________________________

Apparement l'erreur est la meme pour les methodes dans le fichier .C mais je ne vois pas....
pour info j'utilise visual C++ 2010 express.

Désolé pour la longueur du post.
En esperant que vous puissiez m'aider .

chris_27
chris_27
Niveau 10
01 février 2011 à 15:23:55

«

  1. define Cplx

class Cplx{
»

EPIC FAIL ! :rire:

Dejà, tu fais du C++, donc nomme tes fichiers *.hpp / *.cpp.
Ensuite, remplace ton #define par quelque chose comme :

  1. define __CPLX_HPP__

afin d'éviter un conflit dans les noms. :-)))

Enfin,

  1. include <machin.h>

c'est TOUJOURS une erreur.

  1. include <math.h> :d) #include <cmath>

J'espère qu'avec tout ça ça ira un peu mieux déjà. :-)))

Six-One
Six-One
Niveau 10
02 février 2011 à 00:49:17

bonsoir :-)

finalement une bonne partie de mes erreurs venaient du fait que je m'etait trompé en réecrivant le type des elements de la classe que je creais ( Clpx au lieu de Cplx) et surtout je faisais une erreur en créant le projet...enfin bref....

en tout cas merci pour ta reponse Chris_27, en effet le fait de mettre '#define __CPLX_HPP__ ' m'enleve une erreur que je ne comprenais pas du tout :-)

sinon qu'entends tu par:
«

  1. define Cplx

class Cplx{
»

EPIC FAIL !

parcequ'en effet parmis les quelques erreurs qui me restent:

==================================
1>------ Début de la génération : Projet : Cplx, Configuration : Debug Win32 ------
1> Cplx.cpp
1>Cplx.cpp(6): error C2011: 'Cplx' : redéfinition du type 'class'
1>
c:\users\mouyabi\desktop\cours\2010-2011\tp_info\t
p3\cplx\cplx\Cplx.h(6) : voir la déclaration de 'Cplx'
1>Cplx.cpp(65): fatal error C1004: fin de fichier inattendue rencontrée
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
=====================================

il y en a une qui me parle d'une redefinition de classe..... et j'ai bien l'impression que ca a un rapport direct avec ce que tu as noté :-) plus de precision serait chaleureusement acceuillie :-)

merci encore :-)

chris_27
chris_27
Niveau 10
02 février 2011 à 01:19:45

Mettre

  1. define Cplx

ça revient à dire que dans toute la suite, il faudra remplacer les "Cplx" pas des "". Donc quand tu arrives à

"class Cplx{ "

ça devient

"class {"

ce qui va poser problème. :-)

Bref… dans ton Fichier.C, tu as un :

public class Cplx {
…
}

qui n'est pas la bonne façon de faire. La partie :

class Cplx {
…
}

est déjà dans le Ficher.h, donc dans le Fichier.C il faut faire un truc genre :

// constructeur
Cplx::Cplx(float r, float i){
…
}

float Cplx::PartIm() {
return im;
}

etc.

PS: dans ton main.C, il y a un
« #include <Clpx.h> »
qui devrait être un
« #include "Clpx.h" »
je pense.

Six-One
Six-One
Niveau 10
02 février 2011 à 02:39:05

sorry de repondre aussi tard..j'etais encore dessus...

merci encore pour cette rapide reponse en effet ca marche mieu (bien que j'ai encore quelques pb :-)

apres ca je me suis rendu compte que je faisais mal certains appels de fonctions (j'oubliais des '()' pour les fonctions n'ayant pas de parametres) et aussi que je redeclarais les methodes 'public' alors que c'etait deja fait dans le header....du coup cplx.cpp ==> checked!
ayant egalement modifié le truc de test plus de pb :-)
merci pour ton aide

par contre ensuite j'ai d'autres pb :-) lors de la genération du code une liste d'erreur apparait

=====================================
1>------ Début de la génération : Projet : Cplx, Configuration : Debug Win32 ------
1> Cplx.cpp
1> Test_Cplx.cpp
1> Génération de code en cours...
1>Test_Cplx.obj : error LNK2028: jeton non résolu (0A00000B) "public: float __thiscall Cplx::PartIm(void)" (?PartIm@Cplx@@$$FQAEMXZ) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>Cplx.obj : error LNK2028: jeton non résolu (0A000015) "public: float __thiscall Cplx::PartIm(void)" (?PartIm@Cplx@@$$FQAEMXZ) référencé dans la fonction "void __cdecl Conj(class Cplx)" (?Conj@@$$FYAXVCplx@@@Z)
1>Test_Cplx.obj : error LNK2028: jeton non résolu (0A00000C) "public: float __thiscall Cplx::PartReelle(void)" (?PartReelle@Cplx@@$$FQAEMXZ) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>Cplx.obj : error LNK2028: jeton non résolu (0A000016) "public: float __thiscall Cplx::PartReelle(void)" (?PartReelle@Cplx@@$$FQAEMXZ) référencé dans la fonction "void __cdecl Conj(class Cplx)" (?Conj@@$$FYAXVCplx@@@Z)
1>Test_Cplx.obj : error LNK2028: jeton non résolu (0A000009) "public: void __thiscall Cplx::C_Somme_float(class Cplx,float)" (?C_Somme_float@Cplx@@$$FQAEXV1@M@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>Test_Cplx.obj : error LNK2028: jeton non résolu (0A00000A) "public: void __thiscall Cplx::Conj(class Cplx)" (?Conj@Cplx@@$$FQAEXV1@@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>Cplx.obj : error LNK2019: symbole externe non résolu "public: float __thiscall Cplx::PartIm(void)" (?PartIm@Cplx@@$$FQAEMXZ) référencé dans la fonction "void __cdecl Conj(class Cplx)" (?Conj@@$$FYAXVCplx@@@Z)
1>Test_Cplx.obj : error LNK2001: symbole externe non résolu "public: float __thiscall Cplx::PartIm(void)" (?PartIm@Cplx@@$$FQAEMXZ)
1>Cplx.obj : error LNK2019: symbole externe non résolu "public: float __thiscall Cplx::PartReelle(void)" (?PartReelle@Cplx@@$$FQAEMXZ) référencé dans la fonction "void __cdecl Conj(class Cplx)" (?Conj@@$$FYAXVCplx@@@Z)
1>Test_Cplx.obj : error LNK2001: symbole externe non résolu "public: float __thiscall Cplx::PartReelle(void)" (?PartReelle@Cplx@@$$FQAEMXZ)
1>Test_Cplx.obj : error LNK2019: symbole externe non résolu "public: void __thiscall Cplx::C_Somme_float(class Cplx,float)" (?C_Somme_float@Cplx@@$$FQAEXV1@M@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)
1>Test_Cplx.obj : error LNK2019: symbole externe non résolu "public: void __thiscall Cplx::Conj(class Cplx)" (?Conj@Cplx@@$$FQAEXV1@@Z) référencé dans la fonction "int __cdecl main(void)" (?main@@$$HYAHXZ)

1>C:\Users\MOUYABI\Desktop\cours\2010-2011\TP_Info
\TP3\Cplx\Debug\Cplx.dll : fatal error LNK1120: 10 externes non résolus
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========

====================================

et la,je ne vois pas du tout de quoi il peut s'agir...

Une aide serait bien entendu la bienvenue :) merci encore d'avoir repondu a mes interogations jusque la :-)

godrik
godrik
Niveau 30
02 février 2011 à 03:03:17

peut tu nous redonner le code bien indenter sur un wall (comme pastebin.com) ?

_skip
_skip
Niveau 10
02 février 2011 à 14:13:29

Une erreur de linker, le plus souvent cela est dû au fait que certaines méthodes déclarées dans tes headers n'ont pas d'implémentations correspondantes.
Vérifie bien la syntaxe de tes déclarations comme le suggère Chris dans son message précédent.

Six-One
Six-One
Niveau 10
02 février 2011 à 15:22:12

Suite à la demande de 'godrik' les liens ci-dessous renvoient aux codes:

header Cplx.h :d) http://pastebin.com/tp9R080v
Cplx.cpp :d) http://pastebin.com/F33gnM9K
Test_Cplx.cpp :d) http://pastebin.com/ER7zksnX

la dessus j'ai pour l'instant enelvé les #include <iostream> et #include <cmath>

=======================================
skip :d) je suis sur de comprendre tout a fait ce que tu veux dire par la :-) par implementation correspondante à ce qui est declaré dans le header tu entends que j'ai pu ne pas respecter les parametres d'entrées de la methode et le type en sortie de la methode?
ou alors parles tu des operations qui y sont effectuées?
ou encore autre chose?

pour les types de sortie et les parametres je les ai verifiés et surtout lorsqu'il y avait un probleme lors du debug avant le debut de la generation du code ca me le disait. et comme la ca n'est plus le cas je ne pense pas que ce soit ca.pareil pour la construction des methodes.

chris_27
chris_27
Niveau 10
02 février 2011 à 16:29:17

Ligne 16 :

float PartReelle(){ :d) float Cplx::PartReelle(){

Même remarque pour les lignes 21, 27, 32, etc.

Six-One
Six-One
Niveau 10
02 février 2011 à 17:05:49

Merci je vais modifier ca une fois de retour chez moi :-)
Une question cependant. Ca signifie quoi le fait de l'ecrire comme ca? Histoire que je comprenne un peu ce que j'ecris :) et que je sache quoi faire pour les prochaines fois :-)
Et merci encore pour vos reponses :-)

chris_27
chris_27
Niveau 10
02 février 2011 à 17:07:56

Ça signifie que tu définis la méthode PartReelle *** de la classe Cplx ***.

Sans le "Cplx::", le compilateur ne peux pas deviner que ton bout de code est lié à ta classe Cplx (et de fait, tu pourrais très bien avoir une fonction "PartReelle" qui n'a rien à voir avec Cplx).

Six-One
Six-One
Niveau 10
02 février 2011 à 17:27:25

Merci, mais dans ce cas ne faudrait il pas le faire avec toutes les methodes?

chris_27
chris_27
Niveau 10
02 février 2011 à 17:33:48

Bien sûr, il faut faire ça pour toutes les méthodes définies dans ton .C :

« Même remarque pour les lignes 21, 27, 32, etc. »

Six-One
Six-One
Niveau 10
02 février 2011 à 17:50:54

sorry je n'avais pas fait attention au 'ect' du coup je pensais que tu ne me le disais que pour les 4lignes mentionnées :-)

en tout cas je vous tiens au courant de l'evolution une fois que je testerai ces modifications :-)

merci encore.

Six-One
Six-One
Niveau 10
02 février 2011 à 19:13:32

cette fois plus de probleme de generation

par contre une fenetre me dit qu'il est impossible de demarrer le programme....

http://img193.imageshack.us/img193/3227/imageerreur.png

zoom :d) http://img585.imageshack..us/img585/5553/zoomerreur.png

chris_27
chris_27
Niveau 10
02 février 2011 à 23:15:34

Cette fois, moi je ne peux absolument rien pour toi. C'est un problème de Windows, pas un problème de C++… :(

_skip
_skip
Niveau 10
03 février 2011 à 08:27:20

Non, là le truc c'est qu'il a compilé son code comme une bibliothèque de classe, ce qui lui donne une .dll au lieu d'un .exe

chris_27
chris_27
Niveau 10
03 février 2011 à 11:36:38

Si, c'est un problème de Windows :d) J'ai jamais réussi à produire de .dll sous Unix perso. :oui:

_skip
_skip
Niveau 10
03 février 2011 à 12:48:05

T'as commis l'erreur de base de tous les anti-windows : accuser l'OS avant de chercher ailleurs. :diable:

T'as surement eu beaucoup de peine à exécuter directement un .so aussi? Ce sont les options de compilation ou le type de projet qui n'est pas le bon. Ca n'a rien à voir avec l'OS.

PS: Le début du message c'était pour rire hein... :fou:

Six-One
Six-One
Niveau 10
03 février 2011 à 13:08:03

_skip :d) ca doit etre ca :-) en fait je me suis dit que comme je testais une classe il fallait que je la crée comme une biblio de classe :-) je vais essayer de creer un projet vierge dans ce cas et voir ce que ca donne :-)

merci encore a tous pour votre soutien :-)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment