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

Langage C++ Discussion :

Undefined reference to (probleme fonction)


Sujet :

Langage C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 13
    Points : 15
    Points
    15
    Par défaut Undefined reference to (probleme fonction)
    Bonjour à tous, voila j'ai un code chargé de calculer tous les nombres premiers et je veux mettre ces nombres premiers dans un fichier (bloc-note) chacun des programmes fonctionne bien indépendamment et je voulais faire le truc proprement avec des fonctions sauf que quand je les assemble paf !! ça marche pas et je ne comprend pas pourquoi, j'ai fais mes petites recherche sur internet mais je comprend pas toujours pas pourquoi ça ne marche pas. Si quelqu'un peut m'aider qu'il n'hésite pas

    l'erreur est undefined reference to `primeABFile(std::string)'
    ||=== Build: Debug in primeFile (compiler: GNU GCC Compiler) ===|

    C:\Nouveau Dossier\primeFile\pF.h|4|error: variable or field 'primeABFile' declared void|

    C:\Nouveau Dossier\primeFile\pF.h|4|error: 'string' is not a member of 'std'|

    C:\Nouveau Dossier\primeFile\pF.cpp|5|error: variable or field 'primeABFile' declared void|

    C:\Nouveau Dossier\primeFile\pF.cpp|5|error: 'string' was not declared in this scope|

    C:\Nouveau Dossier\primeFile\pF.cpp|5|note: suggested alternative

    C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stringfwd.h|62|note: 'std::string'|

    ||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

    les 3 codes :

    source.cpp

    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
     
    #include <iostream>
    #include "pIF.h"
     
    using namespace std;
     
    int main()
    {
        string x;
        cout << "Donnez l'adresse exacte du fichier ou seront transmis les nombres premiers :" << endl;
        cin >> x;
        primeABFile(x);
     
        return 0;
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifndef PIF_H_INCLUDED
    #define PIF_H_INCLUDED
    #include <string>
     
    void primeABFile(std::string x);
     
    #endif // PIF_H_INCLUDED

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    #include "pIF.h"
    #include <cmath>
     
    void primeABFile(string x)
    {
        int A, B;
        ofstream f1(x);
        ofstream f2(x, ios::app);
        if(f1 && f2)
        do
        {
            cout << "Je vais vous donner tous les nombres premiers compris entre deux entiers " << endl << "naturels " << endl << "A = ";
            cin >> A;
            cout << "B = ";
            cin >> B;
        } while ((A < 0 && B >= A) || (B < 0 && B >= A));
            f2 << "Tous les nombres premiers de " << A << " a " << B << ": " << endl;
            int x1 = A;
            for (int x2 = x1; x2 < 5 && x2 <= B; x2++)
            {
                A = 5;
                if (x2 == 2 || x2 == 3)
                {
                    cout << x2 << " ";
                }
            }
            if (A % 2 == 0)
            {
                A++;
            }
            int z2;
            double y, z1, z3, racx;
            double x = A;
            while (x <= B)
            {
                y = 1;
                racx = sqrt(x);
                do
                {
                    y += 2;
                    z1 = x / y;
                    z2 = z1;
                    z3 = z2;
                    z1 = z1 - z3;
                } while (z1 != 0 && y <= racx);
                if (z1 != 0)
                {
                    f2 << x << " ";
                }
                x += 2;
            }
        else
        {
            cout << "ERREUR: le fichier ne s'ouvre pas !" << endl;
        }
    }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    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 631
    Points : 10 559
    Points
    10 559
    Par défaut
    Il y a un truc normal qui est de ta faute et un truc pas normal ou

    Le truc normal : "'string' was not declared in this scope" En effet tu as omis le using std::string; ou alors il faut spécifier partout std::string.

    Le truc pas normal : "'string' is not a member of 'std'" tu as le bon #include <string>: je ne pige pas. Ou alors ton fichier string n'est pas celui que l'on pense

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    meme quand le code est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef PF_H_INCLUDED
    #define PF_H_INCLUDED
     
    void primeABFile(std::string x);
     
    #endif // PF_H_INCLUDED
    code::blocks me dit :
    ||=== Build: Debug in primeFile (compiler: GNU GCC Compiler) ===|
    C\Documents\Nouveau Dossier\primeFile\pF.h|4|error: variable or field 'primeABFile' declared void|
    e\Documents\Nouveau Dossier\primeFile\pF.h|4|error: 'string' is not a member of 'std'|
    C:\Documents\Nouveau Dossier\primeFile\pF.cpp|5|error: variable or field 'primeABFile' declared void|
    C:\\Documents\Nouveau Dossier\primeFile\pF.cpp|5|error: 'string' was not declared in this scope|
    C:\\Documents\Nouveau Dossier\primeFile\pF.cpp|5|note: suggested alternative
    C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\bits\stringfwd.h|62|note: 'std::string'|
    ||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 307
    Points : 983
    Points
    983
    Par défaut
    Citation Envoyé par Ark Kre Voir le message
    meme quand le code est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ifndef PF_H_INCLUDED
    #define PF_H_INCLUDED
     
    void primeABFile(std::string x);
     
    #endif // PF_H_INCLUDED
    Oui tu utilises un std::string dans ton header donc apres la garde, tu ajoutes #include <string>.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    ha ok merci mais apres je tombe sur ça sur mon .cpp

    ||=== Build: Debug in primeFile (compiler: GNU GCC Compiler) ===|

    \Documents\Nouveau Dossier\primeFile\pF.cpp||In function 'void primeABFile(std::string)'

    \Documents\Nouveau Dossier\primeFile\pF.cpp|10|error: no matching function for call to 'std::basic_ofstream<char>::basic_ofstream(std::string&)'|

    \\Documents\Nouveau Dossier\primeFile\pF.cpp|10|note: candidates are

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    #include "pF.h"
    #include <math.h>
    #include <fstream>
    #include <iostream>
    #include <string>
     
    void primeABFile(std::string a01)
    {
        int A, B;
        std::ofstream f1(a01);
        std::ofstream f2(a01, ios::app);
        if(f1 && f2)
        {
        do
        {
            cout << "Je vais vous donner tous les nombres premiers compris entre deux entiers " << endl << "naturels " << endl << "A = ";
            cin >> A;
            cout << "B = ";
            cin >> B;
        } while ((A < 0 && B >= A) || (B < 0 && B >= A));
            f2 << "Tous les nombres premiers de " << A << " a " << B << ": " << endl;
            int x1 = A;
            for (int x2 = x1; x2 < 5 && x2 <= B; x2++)
            {
                A = 5;
                if (x2 == 2 || x2 == 3)
                {
                    cout << x2 << " ";
                }
            }
            if (A % 2 == 0)
            {
                A++;
            }
            int z2;
            double y, z1, z3, racx;
            double x = A;
            while (x <= B)
            {
                y = 1;
                racx = sqrt(x);
                do
                {
                    y += 2;
                    z1 = x / y;
                    z2 = z1;
                    z3 = z2;
                    z1 = z1 - z3;
                } while (z1 != 0 && y <= racx);
                if (z1 != 0)
                {
                    f2 << x << " ";
                }
                x += 2;
            }
        }
        else
        {
            cout << "ERREUR: le fichier ne s'ouvre pas !" << endl;
        }
    }

  6. #6
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    fait plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     std::ofstream f1(a01.c_str());
    std::ofstream f2(a01.c_str(), ios::app);

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2016
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    merci à tous mnt ça marche

  8. #8
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 471
    Points : 6 110
    Points
    6 110
    Par défaut
    Bonjour,

    Le constructeur de basic_ofstream qui prend en paramètre un const string& est disponible depuis C++11. Donc, s'il n'est pas disponible, soit tu as sélectionné un vieux compilateur avec Code::Blocks, soit tu n'as pas sélectionné les bonnes options de compilation.

    Va dans le menu "Settings" et clique sur "Compiler...". Dans l'onglet "Compiler settings", tu verras une liste de cases à cocher. Si tu utilises GCC, tu verras normalement une case qui correspond à l'option "-std=c++11".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. "Undefined reference to [ma fonction]"
    Par fandebleach123 dans le forum Débuter
    Réponses: 7
    Dernier message: 19/06/2016, 00h45
  2. Réponses: 9
    Dernier message: 01/09/2012, 01h50
  3. Undefined reference avec les fonctions d'une class
    Par romnair dans le forum Débuter
    Réponses: 5
    Dernier message: 10/04/2012, 16h40
  4. Probleme de compilation (undefined reference to)
    Par Verbalinsurection dans le forum C++
    Réponses: 9
    Dernier message: 01/10/2007, 10h50
  5. Réponses: 1
    Dernier message: 19/07/2007, 15h09

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