Was will der Linker von mir

masda

Grünschnabel
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:
Code:
#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
 
Der Prototyp muss der Definition gleichen:

Code:
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:
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:
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");
}
}
 
Zuletzt bearbeitet:
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'
 
ich kann mit den meldungen (null) anfangen :)
Ich benutz nämlich KEIN microsoft(windows ist ne ausnahme)! (!)(!)(!)
Test mal das:
Code:
// 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);
 
Zuletzt bearbeitet:
@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
 
nur code: (verstehen und nicht abtippen(!)) (mit deinen funks)
Code:
char c[1];
int i[1];
int x;
scanf("%d", &x);
i[0] = x;
codieren(c, i);
printf("%s", c);
 
Zuletzt bearbeitet:
Zurück