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 :

Erreur de compilation avec CString


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 41
    Par défaut Erreur de compilation avec CString
    Bonjour,

    Je débute en C++ et j'ai une question, lors de la compilation du code ci-dessous (avec Dev-C++) j'ai pas mal d'erreurs dû à " [Linker error] undefined reference to `CString::~CString()' " ou à " [Linker error] undefined reference to `CString::CString(char const*)' ".... etc....

    Toujours lié à CString !!! J'ai bien mon fichier cstring.h et j'en fais l'inclusion dans mon programme mais il dois me manquer qqch !!!

    Pourriez-vous m'aider ?

    PS: Cstring.h, je l'ai trouvé sur le net

    Merci d'avance

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    #include <cstdlib>
    #include <iostream>
    #include <stdio.h>
    #include <cstring.h>
    using namespace std;
     
    class CSecurity
    {
     
      public:  
     
       CString CSecurity::Crypt(LPCSTR p_lpszTerm)
       {
        	CString strTerm = p_lpszTerm;
        	//strTerm.MakeUpper();
        	LPSTR lpczCursor = (LPSTR) (LPCSTR) strTerm;
        	CString strCrytedTerm;
        	CString strByte;
     
        	int nLength = strTerm.GetLength();
        	int nCounter = 3;
        	int nOffset;
        	int nRotation;
        	unsigned char cCrypted;
        	while (*lpczCursor)
        	{	
        		cCrypted = *lpczCursor++;
     
        		nOffset = m_pOffsetTable[nCounter++ % m_nOffsetTableSize];
        		nRotation = m_pOffsetTable[nCounter++ % m_nOffsetTableSize];
        		//cCrypted = RotLeft(cCrypted,nRotation);
         		cCrypted += nOffset;
     
        		//strByte.Format("%.2X",cCrypted);
        		strCrytedTerm += strByte;
        	}
        	strCrytedTerm = Scramble(strCrytedTerm);
        	return strCrytedTerm;
        }
        //static int DefaultOffsetTable[] = {5,9,2,6,5,3,5,9,1,4,1,5,9,2,6,5,3,5,9,1};
     
        CSecurity::CSecurity()
        {
    		 int DefaultOffsetTable[] = {5,9,2,6,5,3,5,9,1,4,1,5,9,2,6,5,3,5,9,1};
             SetOffsetTable(DefaultOffsetTable,20);
        }
     
        private :
     
        CString CSecurity::Scramble(LPCSTR p_lpszTerm)
        {
        		 CString strTerm = p_lpszTerm;
        		 int nMidPoint = strTerm.GetLength()/2;
        		 CString strLeft = strTerm.Left(nMidPoint);
        		 CString strRight = strTerm.Mid(nMidPoint);
     
        		 CString strScrambled;
        		 LPSTR lpszLeftCursor = (LPSTR) (LPCSTR) strLeft;
        		 LPSTR lpszRightCursor = (LPSTR) (LPCSTR) strRight;
        		 while ((*lpszLeftCursor) && (*lpszRightCursor))
        		 {
        		 		 if (*lpszRightCursor)
        		 		 		 strScrambled += *lpszRightCursor++;
        		 		 if (*lpszLeftCursor)
        		 		 		 strScrambled += *lpszLeftCursor++;
        		 }
        		 return strScrambled;
        }
     
        inline void CSecurity::SetOffsetTable(int* p_pOffsetTable, int p_nTableSize)
        {
        		 m_pOffsetTable = p_pOffsetTable;
        		 m_nOffsetTableSize = p_nTableSize;
        }
     
        int* m_pOffsetTable;
        int  m_nOffsetTableSize; 
    };
     
    int main()
    {
        CSecurity Test;
        Test.CSecurity::Crypt("test");
        return(0);
    }

  2. #2
    Membre confirmé Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Par défaut
    Pourquoi tu n'utilises tout simplement pas std::string? (il y a une raison particulière pour que tu utilises CString?)

    Sinon pour ton problème, peut-être que tu as simplement téléchargé l'en-tête, pas l'implémentation

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 41
    Par défaut
    Hello,

    Merci de ta réponse si rapide, pourquoi CString, car dans le code avec lequel je me suis inspirer il y avait déjà CString et j'ai continuer dans cette voie !

    peut-être que tu as simplement téléchargé l'en-tête, pas l'implémentation
    Il y a bien des chances, qu'est-ce que l'imprimentation ?

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Et bien, en plus du .h, tu dois avoir à minima un .lib pour le lien et s'il s'agit d'un lien dynamique, à l'exécution tu auras besoin d'une DLL. CString, ca ressemble aux MFC. Je ne suis pas sur que tu puisses l'avoir comme ça.

  5. #5
    Membre confirmé Avatar de zabibof
    Inscrit en
    Février 2007
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 188
    Par défaut
    Citation Envoyé par bianconeri
    Il y a bien des chances, qu'est-ce que l'implémentation ?
    En gros, t'as tout simplement téléchargé "CString.h", pas "CString.cpp" (ou la .lib? ou dll?).
    Dans l'en-tête, tu as la définition de ta classe, ça te dis ce que la classe peut faire et dans le .cpp, tu as l'implémentation, ça te dis comment la classe fait ceci ou cela (je l'explique peut-être mal mais en gros c'est ça ), parfois l'implémentation est dans un fichier en-tête mais en générale, c'est dans le .cpp (sauf pour les templates et les fonctions inlines)

    Exemple:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <iostream>
     
    class A
    {
    public:
        void foo();
    };
     
    // implémentation de la méthode foo de la classe A
    void A::foo()
    {
        std::cout << "foo\n";
    }

  6. #6
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    CString est la classe de texte des MFC, et n'est en aucun cas définie dans cstring.h!
    cstring.h contient la définition des fonctions de manipulation de texte héritées du C (d'où le cstring.h), alors que la classe CString est définie dans afxstr.h.
    N'essaye pas d'inclure ce fichier dans ton projet, ce n'est pas aussi facile . Ca ne fonctionnera qu'avec Visual (en version complète), avec un projet MFC. J'en conclus donc que le code dont tu t'es inspiré avait été développé sous Visual.

    NB: je ne vois dans ton code aucun appel à une des fonctions de cstring.h. Il semble être inutile ici...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2003
    Messages : 41
    Par défaut
    Merci de l'information, en cherchant un peu (beaucoup) sur le net il me semble être tomber sur la même analyse que toi spoutspout !!!

    Autant pour moi, est-il possible de faire la même chose avec du "String" standard ?

    Merci de votre réponse

Discussions similaires

  1. Erreur de compilation avec Excel_2k
    Par Debure dans le forum C++Builder
    Réponses: 2
    Dernier message: 27/06/2006, 14h51
  2. Erreur de compilation avec APRO
    Par netchip dans le forum Langage
    Réponses: 1
    Dernier message: 22/04/2006, 23h12
  3. Erreur de compil avec Outp
    Par sixon dans le forum C++
    Réponses: 2
    Dernier message: 27/02/2006, 15h01
  4. Erreur de compilation avec SWITCH et CASE
    Par barbarello dans le forum C++
    Réponses: 4
    Dernier message: 21/01/2006, 21h47
  5. [FreePascal]Erreur de compilation avec Dev-Pascal
    Par youngeikichi dans le forum Free Pascal
    Réponses: 3
    Dernier message: 17/02/2005, 14h22

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