tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
1137
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    masda masda ist offline Mitglied
    Registriert seit
    Sep 2004
    Beiträge
    16
    Hallo Leutz
    Hab mal wieder ein Problem diesesmal mit dem Linker. Ich soll ein Prog schreiben mit dem ich ASCII werte in Strings (und umgekehrt) umwandeln kann. Programmiert schön und gut aber der Linker bringt mir folgende Fehlermeldung:

    cdc.obj : error LNK2001: Nichtaufgeloestes externes Symbol "char __cdecl decodieren(int,char)" (?decodieren@@YADHD@Z)
    cdc.obj : error LNK2001: Nichtaufgeloestes externes Symbol "void __cdecl codieren(char,int)" (?codieren@@YAXDH@Z)
    Debug/cdc.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    und hier mein Code dazu:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>



    void codieren(char,int);
    char decodieren(int,char);


    void main()
    {

    int zahl=0;
    int iwahl=0;
    char text[80];
    int itxt[80];
    char ctxt[80];

    printf("Wollen sie einen text in ASCII(1) oder ASCII-werte in einen Text(2) umwandeln: \n");
    printf("Bitte waehlen Sie 1 oder 2:\n");

    scanf("%d",&iwahl);
    switch(iwahl)
    {
    case 1:
    printf("Bitte geben Sie einen text ein:\n");
    scanf("%s",&text);
    codieren(text[80],itxt[80]);
    printf("Ihr text als ASCII wert: %d \n",itxt);
    break;

    case 2:
    printf("Bitte geben Sie einen ASCII wert ein:\n");
    scanf("%d",&zahl);
    decodieren(zahl,ctxt[80]);
    printf("Ihre ASCII wert als text: %s \n",ctxt);
    break;

    default:
    printf("Koennen Sie nicht lesen!\n");

    }
    }


    void codieren(char text[],int itxt[])
    {

    //printf ("text aus der subroutine %s \n",text);
    int i =0;

    for (i=0;text[i];i++)
    itxt[i] = text[i];
    //itxt[i]=0;
    }

    void decodieren(int zahl[], char ctxt[])
    {
    int i=0;
    for(i=0;zahl[i];i++)
    ctxt[i] = zahl[i];
    }


    Kann mir da vielleicht jemand helfen
     

  2. #2
    Avatar von Aiju
    Aiju Aiju ist offline Mitglied Brokat
    Registriert seit
    Jul 2004
    Beiträge
    268
    Der Prototyp muss der Definition gleichen:

    Code :
    1
    2
    3
    4
    
    void codieren(char,int); // IST FALSCH
    char decodieren(int,char); // IST AUCH FALSCH
    void codieren(char[],int[]); // IST RICHTIG
    char decodieren(int[],char[]); // IST AUCH RICHTIG
    (Du hast die Klammern vergessen )

    Und dann meckert der Compiler: (BCB)
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    Error E2034 test.cpp 30: Cannot convert 'int' to 'char *' in function main()
    Error E2342 test.cpp 30: Type mismatch in parameter 'text' (wanted 'char *', got
     'char') in function main()
    Error E2034 test.cpp 30: Cannot convert 'int' to 'int *' in function main()
    Error E2342 test.cpp 30: Type mismatch in parameter 'itxt' (wanted 'int *', got
    'int') in function main()
    Error E2034 test.cpp 37: Cannot convert 'int' to 'int *' in function main()
    Error E2342 test.cpp 37: Type mismatch in parameter 'zahl' (wanted 'int *', got
    'int') in function main()
    Error E2034 test.cpp 37: Cannot convert 'int' to 'char *' in function main()
    Error E2342 test.cpp 37: Type mismatch in parameter 'ctext' (wanted 'char *', go
    t 'char') in function main()
    Error E2356 test.cpp 60: Type mismatch in redeclaration of 'decodieren(int *,cha
    r *)'
    Error E2344 test.cpp 9: Earlier declaration of 'decodieren(int *,char *)'
    Warning W8070 test.cpp 64: Function should return a value in function decodieren
    (int *,char *)
    *** 10 errors in Compile ***

    Ich würde das ganze eher so schreiben:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    void main()
    {
    int zahl=0;
    int iwahl=0;
    char text;
    printf("Wollen sie einen text in ASCII(1) oder ASCII-werte in einen Text(2) umwandeln: \n");
    printf("Bitte waehlen Sie 1 oder 2:\n");
    scanf("%d",&iwahl);
    switch(iwahl)
    {
    case 1:
    printf("Bitte geben Sie einen text ein:\n");
    scanf("%c",&text);
    printf("Ihr text als ASCII wert: %d \n",text);
    break;
    case 2:
    printf("Bitte geben Sie einen ASCII wert ein:\n");
    scanf("%d",&zahl);
    printf("Ihre ASCII wert als text: %c \n", zahl);
    break;
    default:
    printf("Koennen Sie nicht lesen!\n");
    }
    }
    Geändert von Aiju (19.10.04 um 16:13 Uhr)
     

  3. #3
    masda masda ist offline Mitglied
    Registriert seit
    Sep 2004
    Beiträge
    16
    Hi Aiju
    Nachdem ich deine vorgeschlagenen Änderungen gemacht habe bringt mir der Compiler jetzt folgende Fehler:
    E:\Schule\Datenverarbeitung\C\MSDev98\MyProjects\codedecode\cdc.cpp(29) : error C2664: 'codieren' : Konvertierung des Parameters 1 von 'char' in 'char []' nicht moeglich
    Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    E:\Schule\Datenverarbeitung\C\MSDev98\MyProjects\codedecode\cdc.cpp(36) : error C2664: 'decodieren' : Konvertierung des Parameters 1 von 'int' in 'int []' nicht moeglich
    Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    E:\Schule\Datenverarbeitung\C\MSDev98\MyProjects\codedecode\cdc.cpp(68) : error C2556: 'void __cdecl decodieren(int [],char [])' : Überladene Funktion unterscheidet sich nur hinsichtlich des Rückgabetyps von 'char __cdecl decodieren(int [],char [])'
    E:\Schule\Datenverarbeitung\C\MSDev98\MyProjects\codedecode\cdc.cpp(8) : Siehe Deklaration von 'decodieren'
    E:\Schule\Datenverarbeitung\C\MSDev98\MyProjects\codedecode\cdc.cpp(68) : error C2371: 'decodieren' : Neudefinition; unterschiedliche Basistypen
    E:\Schule\Datenverarbeitung\C\MSDev98\MyProjects\codedecode\cdc.cpp(8) : Siehe Deklaration von 'decodieren'
     

  4. #4
    Avatar von Aiju
    Aiju Aiju ist offline Mitglied Brokat
    Registriert seit
    Jul 2004
    Beiträge
    268
    ich kann mit den meldungen (null) anfangen
    Ich benutz nämlich KEIN microsoft(windows ist ne ausnahme)!
    Test mal das:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    // Codieren
    char c;
    scanf("%d", &c);
    printf("Wert %d als Zeichen: %c\n", c, c);
    // Decodieren
    int c;
    scanf("%c", &c);
    printf("Zeichen %c als Wert: %d\n", c, c);
    Geändert von Aiju (19.10.04 um 16:22 Uhr)
     

  5. #5
    Registriert seit
    Aug 2004
    Beiträge
    213
    Zitat Zitat von Aiju
    ich kann mit den meldungen (null) anfangen
    Ich benutz nämlich KEIN microsoft(windows ist ne ausnahme)!
    [/CODE]
    LOL!
    Du benutz kein "Microsoft" aber Windows, das ist ne Ausnahme.
    Geil , danke für den Lacher am Abend
     
    "Nun, diese taktischen Atomwaffen, das ist ja eine bloße Fortsetzung der Artillerie."
    "Nehmen Sie die Menschen, wie sie sind, andere gibt's nicht."
    "Lieber das halbe Deutschland ganz als das ganze Deutschland halb."
    "Ist es nicht schrecklich, dass der menschlichen Klugheit so enge Grenzen gesetzt sind und der menschlichen Dummheit überhaupt keine?"
    - Konrad Adenauer

    sprachtherapie göttingen

  6. #6
    masda masda ist offline Mitglied
    Registriert seit
    Sep 2004
    Beiträge
    16
    @Aiju
    Danke für deine Hilfe aber wir solen das Prog mit funktionen schreiben. Das deine Lösung des Problems auch funktioniert steht auser Frage. So ist ja auch der einfachste Weg. Ich denke das Problem liegt an meinen Funktionsdefinitionen. Da muß ich nochmal ne nacht drüber schlafen dan wird des schon.
    Trotzdem Danke für deine Hilfe.
    mfg
    masda
     

  7. #7
    Avatar von Aiju
    Aiju Aiju ist offline Mitglied Brokat
    Registriert seit
    Jul 2004
    Beiträge
    268
    nur code: (verstehen und nicht abtippen) (mit deinen funks)
    Code :
    1
    2
    3
    4
    5
    6
    7
    
    char c[1];
    int i[1];
    int x;
    scanf("%d", &x);
    i[0] = x;
    codieren(c, i);
    printf("%s", c);
    Geändert von Aiju (19.10.04 um 19:14 Uhr)
     

Ähnliche Themen

  1. Linker
    Von nosrep123 im Forum VisualStudio & MFC
    Antworten: 6
    Letzter Beitrag: 30.06.10, 09:31
  2. Linker Probleme
    Von MedRamBO im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 23.07.08, 07:50
  3. Linker Error
    Von Sek77 im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 02.04.08, 18:36
  4. Linker ld woher?
    Von sacridex im Forum Linux & Unix
    Antworten: 1
    Letzter Beitrag: 10.04.05, 04:40
  5. Linker Problem Dev C++
    Von Dudadida im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 01.07.04, 10:48