错误而用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;
}
答
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()
或许应该返回int
或size_t
代替char
- len
看起来像它需要一个更大的范围比的char
。
C没有像C++那样的引用..'void parseLength(stream & str);'不是有效的语法(因为'&'),你可以使用指针代替 – Dmitri
@Dmitri,谢谢!帮我应付错误的重要组成部分。但在与布尔线的错误仍然存在。我试图添加但编译器无法识别此头/ –
MyName
的C旧版本没有'bool'类型,但你可以使用一个整数类型,而不是... C99和高达你可以得到'通过包括'stdbool.h'头bool'。 – Dmitri