Forum: PC-Programmierung In Konflikt stehende Typen


von stefan (Gast)


Lesenswert?

Also ich versteh echt nicht, was dem Compiler hier nicht passt:
1
char* decrypt(char *keyword){
2
  
3
  int i;
4
    
5
  for(i=0; i<28; i++){
6
     if((strcmp(keyword, words[i][1])) == 0){
7
       return words[i][0];
8
     }  
9
   }
10
  
11
   return NULL;
12
}

als Fehlermeldung bekomme ich:
In Konflikt stehende Typen für »encrypt« und das ganze in der ersten 
Zeile!
Hat hier irgendwer eine idee?

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Mir fehlt da irgendwie noch die Deklaration von "words"...

von Karl H. (kbuchegg)


Lesenswert?

stefan schrieb:


> als Fehlermeldung bekomme ich:
> In Konflikt stehende Typen für »encrypt« und das ganze in der ersten
> Zeile!

IN deinem ganzen Code kommt kein "encrypt" vor.

> Hat hier irgendwer eine idee?

Alle Datentypen zeigen
Aufruf zeigen (inkl Datentypen der beteiligten Argumente)

von stefan (Gast)


Lesenswert?

also:
1
char *words[3][2]={  {"a","alles"},
2
                     {"b","Test"},
3
                     {"c","und"},
4
                   }
5
6
/*geht eigentlich das Ganze Alphabet durch*/

in der main wird eine Methode aufgerufen:
1
void find(){
2
3
  char d;
4
  char buffer[10];
5
  int l = 0;
6
  
7
  memset(buffer, '\0', 10);
8
  
9
  while((d=getc(stdin)) != EOF){
10
    
11
    if(d == ' '){
12
      char *solve;
13
      solve = decrypt(buffer);
14
      
15
      if(solve != NULL){
16
        printf("%s", solve);
17
        memset(buffer, '\0', 10);
18
        l = 0;
19
      }
20
    }
21
    buffer[l]=d;
22
    l++;

hab den Code jetzt ein bisschen gekürzt, aber da sollte jetzt zumindest 
alles dabei sein.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Alle Datentypen zeigen
> Aufruf zeigen (inkl Datentypen der beteiligten Argumente)

von stefan (Gast)


Lesenswert?

1
int main(int argc, char *argv[]){
2
3
  void find();
4
5
6
  int opt;
7
  
8
  while ((opt = getopt(argc, argv, "f")) != -1){
9
    
10
    switch(opt){
11
    
12
      case 'f':
13
        find();
14
        break;
15
            
16
      default:
17
        printf("%s", "ungültige Parameter wurden angegeben");
18
        break;  
19
    }
20
    
21
  }

Ich hoffe, dass reicht...mehr hab ich nämlich nicht mehr :D

von Nico S. (nico22)


Lesenswert?

Du lügst.

von DirkB (Gast)


Lesenswert?

Besteht der Fehler denn noch mit dem gekürzten Code?
Und wo ist das encrypt aus deinem ersten Post?

von stefan (Gast)


Lesenswert?

Das Problem ist, dass ich nicht einfach den gesamten Code nehmen kann 
und hier hinein kopieren kann. Dabei könnt ich Probleme mit meiner 
Abgabe bekommen.

Das ist genau die Hälfte von meinem Programm, ohne die libraries!

von Nico S. (nico22)


Lesenswert?

Es gibt aber mit "encrypt" einen Fehler und die Funktion steht 
nirgendwo. Wie sollen wir dir da helfen?

von stefan (Gast)


Lesenswert?

ich habe immer den decrypt genommen, hab keinen encrypt 
hineingeschrieben. Hab den ersten post nicht geändert!

Bekomm den Fehler bei beiden Funktionen. encrypt ist nur die umkehrung!

von stefan (Gast)


Lesenswert?

sry, das hab ich komplett übersehen, dass ich den <<encrypt>> Fehler 
gepostet habe.

Ich stell das Ganze noch einmal schnell zusammen mit encrypt und poste 
es dann.

von Meister E. (edson)


Lesenswert?

> Hat hier irgendwer eine idee?

Ja, strcmp() erwartet einen const char *

Gruß,
Edson

von stefan (Gast)


Lesenswert?

1
int main(int argc, char *argv[]){
2
3
  void find();
4
5
6
  int opt;
7
  
8
  while ((opt = getopt(argc, argv, "h")) != -1){
9
    
10
    switch(opt){
11
    
12
      case 'h':
13
        hide();
14
        break;
15
            
16
      default:
17
        printf("%s", "ungültige Parameter wurden angegeben");
18
        break;  
19
    }
20
 }
21
return 0
22
}
23
24
void hide(){
25
26
  char c;
27
28
  while((c=getc(stdin)) != EOF){
29
30
      if (c =='\n'){
31
        break;
32
      }
33
      
34
      printf("%s%s", encrypt(c), " ");
35
        
36
    }
37
}
38
39
char* encrypt(char letter){
40
  int a;
41
  
42
  for(a=0; a<28;a++){
43
    if(words[a][0][0]==letter){
44
      return words[a][1];
45
    }
46
  }
47
  return NULL;
48
}

von DirkB (Gast)


Lesenswert?

Nochmal:
Besteht der Fehler denn noch mit dem gekürzten Code?
Hast du encrypt irgendwo noch deklariert?

von NurEinGast (Gast)


Lesenswert?

Du hast die    char* encrypt(char letter)
erst nach der Verwendung in printf("%s%s", encrypt(c), " ")
definiert.

Entweder ein char* encrypt(char letter);
ganz oben in den SOurce einfügen, oder die Funktion ÜBER der Verwendung 
schreiben - also hide() und encrypt() vertauschen.

Ansonsten setzt der Compiler bei der Verwendung von der ihm unbekannten 
Funktion encrypt() einen default wert ein.

von XXX (Gast)


Lesenswert?

Hallo

Und eventuell ganz oben
void find();
durch
void hide();
ersetzen.

Sollte so, wie es ist, eigentlich auch angemeckert werden.

Gruß
Joachim

von stefan (Gast)


Lesenswert?

Das löst mein Problem immer noch nicht. Hab jetzt beide Varianten 
versucht, aber irgendwie will das nicht. Habe hide() mit encrypt() 
vertasucht, kein Resultat und auch wenn ich ganz oben
1
char* encrypt(char letter);

ändert das nichts :(

von NurEinGast (Gast)


Lesenswert?

Wo "ganz oben" hast Du das gemacht ?

Bisher hast Du anscheinend :
1
int main(int argc, char *argv[]){
2
3
  void find();

sollte aber eher
1
  void find();
2
  void hide();
3
  char* encrypt(char letter);
4
5
int main(int argc, char *argv[]){
sein

von stefan (Gast)


Lesenswert?

genau so, wie du es gerade gepostet hast, habe ich es vorher im Programm 
gemacht. Bekomm trotzdem den blöden Fehler immer noch!

von NurEinGast (Gast)


Lesenswert?

Das verwundert mich.
Bei mit compiliert es ohne Fehler
1
#include "stdafx.h"
2
#include <stdio.h>
3
4
/* ************************************/
5
/* Nur weil ich hier kein getopt habe */
6
int getopt(int argc, char *argv[], const char[2])
7
{
8
   return 0;
9
}
10
/* Nur weil ich hier kein getopt habe */
11
/* ************************************/
12
13
14
void hide();
15
char* encrypt(char letter);
16
17
char *words[3][2]={  {"a","alles"},
18
                     {"b","Test"},
19
                     {"c","und"},
20
                   };
21
22
23
24
int main(int argc, char *argv[])
25
{
26
27
  
28
   int opt;
29
  
30
    while ((opt = getopt(argc, argv, "h")) != -1){
31
    
32
    switch(opt){
33
    
34
      case 'h':
35
        hide();
36
        break;
37
            
38
      default:
39
        printf("%s", "ungültige Parameter wurden angegeben");
40
        break;  
41
    }
42
    
43
44
 } 
45
return 0;
46
}
47
48
void hide(){
49
50
  char c;
51
52
  while((c=getc(stdin)) != EOF){
53
54
      if (c =='\n'){
55
        break;
56
      }
57
      
58
      printf("%s%s", encrypt(c), " ");
59
        
60
    }
61
}
62
63
char* encrypt(char letter){
64
  int a;
65
  
66
  for(a=0; a<28;a++){
67
    if(words[a][0][0]==letter){
68
      return words[a][1];
69
    }
70
  }
71
  return NULL;
72
}

von stefan (Gast)


Lesenswert?

Ich muss mit diesem Statement Kompilieren:

gcc -ansi -pedantic -Wall -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -g -c 
filename.c

von NurEinGast (Gast)


Lesenswert?

Hab keinen gcc hier.
Würdest Du das Programm von oben mal 1:1 ( allerdings ohne #include 
"stdafx.h" ) durch Deinen Compiler jagen und die Fehlermeldung mit copy 
& paste zeigen ?

von stefan (Gast)


Lesenswert?

Ich versteh jetzt gar nichts mehr. Hab das jetzt getestet und bei dir 
bekomm ich keinen Fehler!

von NurEinGast (Gast)


Lesenswert?

Tja - dann liegt Dein Fehler woanders und Du musst halt weitersuchen 
oder uns doch mehr von Deinen "echten" Sourcen zeigen. Sourcen soweit, 
dass wir den Fehler nachvollziehen können.

von stefan (Gast)


Lesenswert?

Fehler gefunden!

Wie kann bitte diese librarie den Fehler verursachen?
1
#include <unistd.h>

von DirkB (Gast)


Lesenswert?

Wegen
1
void         encrypt(char[64], int);
 in eben jenem Header.

von stefan (Gast)


Lesenswert?

D.h. entweder ich kann optarg verwenden oder ich bekomm einen Fehler!?

von DirkB (Gast)


Lesenswert?

Oder du gibst deiner Funktion einen anderen Namen.

von NurEinGast (Gast)


Lesenswert?

oder Deine encrypt() in myEncrypt() umbenennen ... ?

von stefan (Gast)


Lesenswert?

Nur das ich das jetzt richtig verstehe:

Die librarie
1
#include <unistd.h>
 stellt eine function
1
void encrypt(char[64], int);
 zur Verfügung. Da ich mir jetzt selber eine Funktion mit dem Gleichen 
Namen geschrieben habe, hab ich natürlich einen Fehler bekommen!?

von Karl H. (kbuchegg)


Lesenswert?

stefan schrieb:
> Nur das ich das jetzt richtig verstehe:
>
> Die librarie
> #include <unistd.h>
> stellt eine function
> void encrypt(char[64], int);
> zur Verfügung.

Ein Header File ist ein Textfile wie jedes andere.
Mach es in deinem Editor auf und schau rein

Ja.
http://pubs.opengroup.org/onlinepubs/7908799/xsh/unistd.h.html

> Da ich mir jetzt selber eine
> Funktion mit dem Gleichen Namen geschrieben habe, hab ich natürlich
> einen Fehler bekommen!?

Und du hast auch gesehen, dass Fehler/Probleme oft an Stellen sitzen, an 
die du gar nicht gedacht hast. Darum bestehen hier auch 80% des Forums 
darauf, dass du VOLLSTÄNDIGEN Code postest. Dann hätten man sich das 
Hin-und Her über 3 Stunden sparen können. Das kommt dir zu gute und uns 
auch.


Und PS:
Ein Header File alleine ist noch keine Library. Ein Header File 
beschreibt die Dinge, die zum Beispiel in einer Library zu finden sind.

von stefan (Gast)


Lesenswert?

Vielen Dank für die Erklärung und die Hilfe!

von Paul Baumann (Gast)


Lesenswert?

Ich verstehe zwar nichts von der Sprache "C", aber in Konflikt stehende
Typen gibt es nicht nur bei Dir im Rechner, sondern auch im Forum 
"Offtopic"

;-)

MfG Paul

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.