2013-04-10 77 views
1

我已经写在C以下代码:C编译器无意义的错误?

n. struct UDSData { 
     char *name; 
     char *address; 
     }; 

n. char UDS1[16] = "fill up sixteen", UDS2[16] = "fill up sixteen"; 

n. while (something) { 
     ... 

108. char UDS1Temp[16], UDS2Temp[16]; 
109. strcpy(UDS1Temp, UDS1); 
110. strcpy(UDS2Temp, UDS2); 
111. 
112. struct UDSData item = {UDS1Temp, UDS2Temp}; 
113. UDSCodes[UDSTotal++] = item; 
    } 

任何想法,为什么代码编译给这些错误:

1><file>(112): error C2143: syntax error : missing ';' before 'type' 
1><file>(113): error C2065: 'item' : undeclared identifier 
1><file(113): error C2440: '=' : cannot convert from 'int' to 'UDSData' 

卸下strcpy()和输入UDS1UDS2直接进入结构工程。

+0

112行对我没有多大意义,但我没有及时更新C.您使用哪种C标准以及UDSData是哪种类型? – nvoigt 2013-04-10 08:56:09

+0

听起来像编译器没有找到这种类型的'UDSData'。它是否正确定义? ('include头部,没有循环依赖等)? – 2013-04-10 08:57:19

+0

@KirilKirov是的,这种类型是先前定义的。正如我所提到的,如果我用UDS1替换UDS1Temp,并且在结构中用UDS2替换UDS2Temp,它就可以正常工作。 – 2013-04-10 09:00:09

回答

2

您几乎可以肯定地使用早期的编译器标准,如C89,它不允许混合声明和代码。您需要在代码块的开始附近声明item。事情是这样的:

char UDS1Temp[16], UDS2Temp[16]; 
struct UDSData item = {UDS1Temp, UDS2Temp}; 

strcpy(UDS1Temp, UDS1); 
strcpy(UDS2Temp, UDS2); 
UDSCodes[UDSTotal++] = item 

由于您只放置指针到结构,初始化可以在strcpy之前完成。但是你必须在之后声明UDSData这两个char数组。