2016-07-24 6 views
-2

Ich habe eine .c-Datei und zwei Header. Ich habe keine Ahnung, warum diese Fehler aufgetreten sind. Ich habe versucht, Lösungen im Netz zu finden, konnte sie aber nicht auf meinen Code anwenden.Fehler beim Beheben von Fehlern in C

Structs.h

#ifndef STRUCTS_H 
#define STRUCTS_H 

typedef struct stream 
{ 
    char* enc; //binary string 
    int pos; 
}stream; 

typedef struct tag 
{ 
    int tagClass; 
    char tagConstructed; 
    char tagNumber; 
}tag; 

#endif 

Funcs.h Fehler:

Error 22 error C2143: syntax error : missing '{' before '&' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 15 1 asn1 
Error 26 error C2143: syntax error : missing '{' before '&' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 36 1 asn1 
Error 21 error C2143: syntax error : missing ')' before '&' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 15 1 asn1 
Error 25 error C2143: syntax error : missing ')' before '&' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 36 1 asn1 
Error 15 error C2061: syntax error : identifier 'isUniversal' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 3 1 asn1 
Error 18 error C2061: syntax error : identifier 'isEOC' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 7 1 asn1 
Error 17 error C2059: syntax error : 'type' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 3 1 asn1 
Error 20 error C2059: syntax error : 'type' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 7 1 asn1 
Error 16 error C2059: syntax error : ';' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 3 1 asn1 
Error 19 error C2059: syntax error : ';' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 7 1 asn1 
Error 24 error C2059: syntax error : ')' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 15 1 asn1 
Error 28 error C2059: syntax error : ')' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 36 1 asn1 
Error 23 error C2059: syntax error : '&' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 15 1 asn1 
Error 27 error C2059: syntax error : '&' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 36 1 asn1 


#ifndef FUNCS_H 
#define FUNCS_H 

#include "Structs.h" 

bool isUniversal(tag curTag); 
bool isEOC(tag curTag); 
char getByte(stream curStream); 
void parseTag(stream & str, tag & tag); 
char parseLength(stream & str); 

#endif 

Functions.c Fehler:

Error 22 error C2143: syntax error : missing '{' before '&' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 15 1 asn1 
Error 26 error C2143: syntax error : missing '{' before '&' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 36 1 asn1 
Error 21 error C2143: syntax error : missing ')' before '&' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 15 1 asn1 
Error 25 error C2143: syntax error : missing ')' before '&' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 36 1 asn1 
Error 15 error C2061: syntax error : identifier 'isUniversal' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 3 1 asn1 
Error 18 error C2061: syntax error : identifier 'isEOC' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 7 1 asn1 
Error 17 error C2059: syntax error : 'type' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 3 1 asn1 
Error 20 error C2059: syntax error : 'type' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 7 1 asn1 
Error 16 error C2059: syntax error : ';' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 3 1 asn1 
Error 19 error C2059: syntax error : ';' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 7 1 asn1 
Error 24 error C2059: syntax error : ')' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 15 1 asn1 
Error 28 error C2059: syntax error : ')' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 36 1 asn1 
Error 23 error C2059: syntax error : '&' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 15 1 asn1 
Error 27 error C2059: syntax error : '&' c:\users\natasha\documents\visual studio 2012\projects\asn1\asn1\functions.c 36 1 asn1 


#include "Funcs.h" 

bool isUniversal(tag curTag) { 
    return curTag.tagClass == 0x00; 
} 

bool isEOC(tag curTag) { 
    return (curTag.tagClass == 0x00) && (curTag.tagNumber == 0x00); 
} 

char getByte(stream curStream) { 
    return curStream.enc[curStream.pos]; 
} 

void parseTag(stream & str, tag & tag) 
{ 
    char buf, tempNumber; 
    buf = getByte(str); 
    tempNumber = 0x00; 
    tag.tagClass = buf >> 6; 
    tag.tagConstructed = ((buf & 0x20) != 0); 
    tag.tagNumber = buf & 0x1F; 
    if (tag.tagNumber == 0x1F) 
    { 
     do 
     { 
      str.pos++; 
      buf = getByte(str); 
      tempNumber = (tempNumber << 7) | (buf & 0x7F); 
     }while(buf & 0x80); 

     tag.tagNumber = tempNumber; 
    } 
} 

char parseLength(stream & str) { 
    char buf, len; 
    int numberOfOctets, i; 
    buf = getByte(str); 
    len = 0x00; 
    numberOfOctets = 0; 
    if (buf < 0x80) { 
     len = buf; //short form 
    } else { //long form 
     numberOfOctets = buf & 0x7F; 
     for (i = 0; i < numberOfOctets; ++i) { 
      len = (len * 256) + getByte(str); 
      str.pos++; 
     } 
    } 

    return len; 
} 
+4

C hat keine Referenzen wie C++ .. 'void parseLength (Stream & str);' ist keine gültige Syntax (wegen '&'). Sie können stattdessen Zeiger verwenden. – Dmitri

+0

@Dmitri, thanks! Dieser Rat Ich habe versucht, hinzuzufügen, aber der Compiler kann diesen Header nicht erkennen/ – MyName

+0

Ältere Versionen von C haben keinen 'Bool'-Typ , aber du kannst stattdessen einen Integer-Typ verwenden ... C99 und höher kannst du 'bool' bekommen, indem du die' stdbool.h' -Header einfügst – Dmitri

Antwort

1

C nicht über Referenzen wie C++ tut. void parseLength(stream & str); ist aufgrund der & keine gültige Syntax. Sie können stattdessen Zeiger verwenden.

Zum Beispiel Ihrer parseLength() Funktion konvertiert einen Zeiger zu verwenden (und den Rückgabetyp ändern, um die Definition zu entsprechen), wird der Prototyp:

char parseLength(stream *str); 

Und in der Funktion Körper werden Sie zu dereferenzieren brauchen der Zeiger je nach Bedarf, wie folgt aus:

char parseLength(stream *str) { 
    char buf, len; 
    int numberOfOctets, i; 
    buf = getByte(*str); /* use "*" to get the object from the pointer */ 
    len = 0x00; 
    numberOfOctets = 0; 
    if (buf < 0x80) { 
     len = buf; //short form 
    } else { //long form 
     numberOfOctets = buf & 0x7F; 
     for (i = 0; i < numberOfOctets; ++i) { 
      len = (len * 256) + getByte(*str); 
      str->pos++; /* Use "->" to access struct members from the pointer */ 
     } 
    } 

    return len; 
} 

außerdem benötigen Sie eine Adresse (Zeiger) anstelle des eigentlichen Objekt zu übergeben, so müssten Sie auch die Anrufe an die Funktion von zB ändern. parseLength(str) bis parseLength(&str).

Sie müssten natürlich ähnliche Änderungen für parseTag() und jeden anderen Code vornehmen, der versucht, Referenzen zu verwenden.

wahrscheinlich einige der anderen Funktionen wie getByte() sollte auch ... zum Beispiel einen Zeiger anstelle der tatsächlichen Struktur nehmen, wenn getByte() Bedürfnisse der pos Mitglied des stream Argument zu ändern, ist es so geführt, dass es das Objekt wirkt sich aus der Anrufer und nicht nur eine Kopie davon.

Auch sollte parseLength() wahrscheinlich zurückkehren int oder size_t statt char - len sieht aus wie es wird eine größere Reichweite als die von char benötigen.

Verwandte Themen