错误而用C

问题描述:

修正错误我有一个.c文件和两个头。我不知道为什么会出现这些错误。我试图在网络中找到解决方案,但无法将其应用于我的代码。错误而用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错误:

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错误:

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没有像C++那样的引用..'void parseLength(stream & str);'不是有效的语法(因为'&'),你可以使用指针代替 – Dmitri

+0

@Dmitri,谢谢!帮我应付错误的重要组成部分。但在与布尔线的错误仍然存​​在。我试图添加但编译器无法识别此头/ – MyName

+0

的C旧版本没有'bool'类型,但你可以使用一个整数类型,而不是... C99和高达你可以得到'通过包括'stdbool.h'头bool'。 – Dmitri

C没有引用像C++一样。由于&void parseLength(stream & str);是无效的语法。不过,您可以改用指针。

例如,转换您的parseLength()功能使用指针(和改变返回类型相匹配的定义),原型变为:

char parseLength(stream *str); 

而在函数体则需要取消引用根据需要,这样的指针:

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; 
} 

此外,你需要传递一个地址(指针),而不是实际的对象,所以你也只需要修改从如函数调用。 parseLength(str)parseLength(&str)

你当然需要做出类似的改变为parseTag()并尝试使用引用其他任何代码。

可能的一些像getByte()其它功能应该采取一个指针,而不是实际的结构,以及...例如,如果getByte()需要修改stream参数的pos成员它的传递,使得它影响从对象来电者,而不只是它的副本。

此外,parseLength()或许应该返回intsize_t代替char - len看起来像它需要一个更大的范围比的char