Ajax v1.0.61025版本后,程序中总是出现:错误:'sys'未定义的信息.

本文介绍了解决在使用Ajax v1.0.61025版本时遇到的'sys'未定义错误的方法。通过修改Web.Config文件中的配置,更正命名空间,并调整页面元素的位置来解决该问题。
刚刚调试ajax的扩展控件,总是提示“sys”未定义错误。
百度结果如下:


由于重新安装了Ajax v1.0.61025版本后,程序中总是出现:错误:'sys'未定义的信息.

最后找到了问题的所在. 以下是我的解决方法,仅供参考。
首先Web.Config 中配置成:
.

.............
<httpHandlers>
      
<remove verb="*" path="*.asmx"/>
      
<!--
      <add verb="*" path="*.asmx" validate="false" type="Microsoft.Web.Script.Services.
ScriptHandlerFactory, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"/>
      <add verb="GET" path="ScriptResource.axd" type="Microsoft.Web.Handlers.
ScriptResourceHandler" validate="false"/>
    
-->
     
<!--把上面的改为如下,1.0 rc版,已经把命名空间改为了system-->
       
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.
ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35"
/>
      
<add verb="GET" path="ScriptResource.axd" type="System.Web.Handlers.
ScriptResourceHandler"
 validate="false"/>
    
     
</httpHandlers>
<compilation debug="true">
 
<assemblies>
 
<!--
         <add assembly="Microsoft.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
改为如下         
-->
        
           
<add assembly="System.Web.Extensions, Version=1.0.61025.0,
Culture=neutral, PublicKeyToken=31BF3856AD364E35"
/>
 
</assemblies>
</compilation>

............
 

重新编译,运行即可.

如果配置Web.Config后运行仍然报错误,请将所有页面的中的 <asp:ScriptManager id="ScriptManager1" runat="server" AsyncPostBackTimeout="200">
    </asp:ScriptManager>
紧跟在<Form>标记之后.



构建目标 ‘Target 1’ 编译 main.c… USER\MAIN.C(20): 错误 C141: 在 ‘;’ 附近存在语法错误 编译 smg.c… 编译 ds18b20.c… APP\DS18B20\DS18B20.C(14): 错误 C202: ‘s16’: 未定义的标识符 APP\DS18B20\DS18B20.C(14): 错误 C141: 在 ‘temp’ 附近存在语法错误 APP\DS18B20\DS18B20.C(15): 错误 C141: 在 ‘float’ 附近存在语法错误 APP\DS18B20\DS18B20.C(15): 错误 C202: ‘value’: 未定义的标识符 APP\DS18B20\DS18B20.C(27): 错误 C202: ‘temp’: 未定义的标识符 APP\DS18B20\DS18B20.C(30): 错误 C202: ‘value’: 未定义的标识符 APP\DS18B20\DS18B20.C(32): 错误 C202: ‘value’: 未定义的标识符 编译 public.c… PUBLIC\PUBLIC.C(34): 错误 C202: ‘u32’: 未定义的标识符 PUBLIC\PUBLIC.C(34): 错误 C141: 在 ‘integer’ 附近存在语法错误 PUBLIC\PUBLIC.C(41): 错误 C202: ‘integer’: 未定义的标识符 PUBLIC\PUBLIC.C(41): 错误 C141: 在 ‘num’ 附近存在语法错误 PUBLIC\PUBLIC.C(42): 错误 C202: ‘decimal’: 未定义的标识符 PUBLIC\PUBLIC.C(48): 错误 C202: ‘integer’: 未定义的标识符 PUBLIC\PUBLIC.C(48): 错误 C202: ‘integer’: 未定义的标识符 PUBLIC\PUBLIC.C(49): 错误 C202: ‘integer’: 未定义的标识符 PUBLIC\PUBLIC.C(49): 错误 C202: ‘integer’: 未定义的标识符 PUBLIC\PUBLIC.C(50): 错误 C202: ‘integer’: 未定义的标识符 PUBLIC\PUBLIC.C(53): 错误 C202: ‘decimal’: 未定义的标识符 PUBLIC\PUBLIC.C(54): 错误 C202: ‘decimal’: 未定义的标识符 PUBLIC\PUBLIC.C(157): 错误 C202: ‘u32’: 未定义的标识符 PUBLIC\PUBLIC.C(157): 错误 C141: 在 ‘period’ 附近存在语法错误 PUBLIC\PUBLIC.C(160): 错误 C202: ‘period’: 未定义的标识符 PUBLIC\PUBLIC.C(173): 错误 C202: ‘display_mode’: 未定义的标识符 目标未创建
最新发布
09-12
<think> 我们遇到了多个编译错误,主要问题集中在未定义的标识符上,比如's16', 'u32','value','temp','integer','decimal','display_mode','period'等。 根据错误信息,这些错误主要出现在ds18b20.c和public.c文件中。 分析: 1. 在ds18b20.c中,错误集中在未定义的's16'和变量'temp'、'value'。通常,'s16'可能是表示有符号16位整数的自定义类型(常见于嵌入式编程)。 2. 在public.c中,错误涉及'u32'(通常表示无符号32位整数)、'integer'、'decimal'以及'display_mode'、'period'等。 可能的原因: - 缺少必要的类型定义(typedef)。例如,没有定义s16、u32等类型。 - 变量在使用前未声明(或者作用域问题)。 - 可能缺少头文件,或者头文件中没有声明这些类型和变量。 解决方案: 1. 确保有定义基本数据类型的头文件(例如,使用typedef定义s16、u32等)。通常,在嵌入式系统中,会在一个公共头文件(如common.h或types.h)中定义这些类型。 2. 检查变量是否在使用前已经声明(声明位置是否正确)。 3. 检查头文件是否被正确包含。 我们假设项目中缺少一个定义这些基本类型的头文件。我们可以创建一个名为“types.h”的头文件,并在其中定义常用的数据类型。 步骤: 1. 创建一个名为types.h的文件(如果还没有的话),并添加以下内容: ```c #ifndef _TYPES_H_ #define _TYPES_H_ typedef signed char s8; typedef unsigned char u8; typedef signed short s16; typedef unsigned short u16; typedef signed long s32; typedef unsigned long u32; typedef float f32; typedef double f64; #endif ``` 2. 在ds18b20.c、public.c以及其他需要这些类型的源文件中包含这个头文件(#include "types.h")。 针对ds18b20.c中的错误: - 第14行:使用了未定义的's16',所以需要包含types.h。 - 同时,检查变量'temp'和'value'是否已经声明。根据错误,似乎这些变量在使用前没有声明。我们需要查看代码并修正。 假设ds18b20.c中第14行原本是: s16 temp; float value; 那么,在包含types.h之后,s16就被定义了,所以这个错误应该解决。 针对public.c中的错误: - 同样,包含types.h可以解决'u32'未定义的问题。 - 对于'integer'和'decimal',这些可能是变量名,需要检查是否在函数内部声明。如果是在函数外部(全局变量),则需要在头文件中声明(并在源文件中定义);如果是局部变量,则需要在函数内部声明。 根据错误信息,public.c中使用了'integer'、'decimal'、'display_mode'、'period'等变量,但是未定义。我们需要查看代码,确定这些变量应该是全局变量还是局部变量,然后进行声明。 例如,在public.c的第34行: u32 integer; // 如果已经包含types.h,那么u32就定义了,所以错误会消失。 但是,如果这些变量是在某个函数内部使用的局部变量,那么需要在使用前声明(通常在函数开头)。 另外,错误还提到了'display_mode'和'period'未定义,同样需要检查是否声明。 总结步骤: 1. 创建types.h定义基本类型(如果还没有)。 2. 在出错的源文件中包含types.h(以及其他必要的头文件)。 3. 检查所有未定义的变量,确保在使用前声明(局部变量在函数开始处声明,全局变量在文件顶部声明,并在需要使用的其他文件中用extern声明)。 4. 如果这些变量是在其他文件中定义的全局变量,那么在public.c中使用时,应该用extern声明。 由于我们没有具体的代码,只能给出一般性建议。 另外,在main.c中第20行有一个语法错误,需要检查该行代码是否有遗漏分号或其他语法问题。 重新检查main.c的第20行,可能只是一个简单的语法错误,比如缺少分号或者括号不匹配。 示例修正: 假设main.c第20行是: int a = 5 // 缺少分号 修正为: int a = 5; 因此,我们需要: - 修复main.c中的语法错误(仔细检查第20行)。 - 创建并包含types.h。 - 在ds18b20.c和public.c中,确保所有变量在使用前都已声明。 由于无法看到具体代码,下面给出一个修正示例: 例如,对于ds18b20.c的第14行,我们可能看到: s16 temp; float value; 在包含了types.h后,s16被定义,那么这两行声明就是正确的。 对于public.c,假设第34行是: u32 integer; 那么同样,在包含types.h后,u32就被定义了。 另外,如果public.c中使用了其他文件中定义的全局变量,比如: extern u32 period; // 声明period是在其他文件中定义的全局变量 extern int display_mode; 如果这些变量是在public.c内部使用的局部变量,那么应该在函数内部声明,例如: void some_function() { u32 period; // 声明为局部变量 // ... } 最后,由于错误信息中public.c的第41行开始出现integer和decimal未定义,我们需要检查这些变量是否在同一个作用域中声明。 示例:如果public.c中有如下代码: void convert() { integer = ...; // 错误:integer未定义 } 那么我们需要在函数内部声明: void convert() { u32 integer; // 或者根据类型声明 f32 decimal; // ... } 或者,如果它们是全局变量,则需要在文件顶部(函数外部)声明,例如: u32 integer; f32 decimal; 注意:全局变量在多个文件中使用时,在一个文件中定义,在其他文件中用extern声明。 由于错误信息较长,我们可能需要逐一检查每个错误行。 综上所述,我们采取以下步骤: 1. 创建types.h并包含在项目中,然后在每个使用到这些类型的源文件中包含该头文件。 2. 检查每个错误位置的变量是否声明,以及声明类型是否正确。 3. 修正main.c中的语法错误(第20行附近)。 下面我们模拟一个修正后的代码示例: 假设在ds18b20.c中,我们在开头包含types.h: #include "ds18b20.h" #include "types.h" // 新增 在public.c中,我们也在开头包含types.h: #include "public.h" #include "types.h" // 新增 然后,检查public.c中第34行:原来是 `u32 integer;` 现在因为包含了types.h,所以u32定义了。 同样,第41行:如果integer和decimal是在函数内部使用的局部变量,则需要在函数内部声明。例如: void someFunction() { u32 integer; // 声明为局部变量 f32 decimal; ... // 使用integer和decimal } 如果它们是在public.c中定义的全局变量,则在函数外部声明(在public.c中): u32 integer; f32 decimal; 如果这些全局变量在其他文件中定义,那么在public.c中应该使用extern声明: extern u32 integer; extern f32 decimal; 注意:全局变量只能在一个源文件中定义(分配存储空间),其他文件使用extern引用。 最后,关于public.c中出现的'display_mode'和'period',同样处理: - 如果是全局变量,确保在public.c中用extern声明(如果定义在其他文件中)或者在本文件中定义。 - 如果是局部变量,则需要在函数内部声明。 由于无法看到具体代码,只能提供这些通用建议。 因此,请按照上述思路修改代码。 注意:在嵌入式编程中,经常使用typedef定义明确大小的整数类型(如u8, s16, u32等),因此创建types.h是一种常见的做法。 如果项目中已经有了类似的定义(可能在某个头文件中),那么请确保在ds18b20.c和public.c中包含了该头文件。 如果问题仍然存在,请检查头文件包含路径是否正确。 下面,我们假设没有这样的头文件,然后给出创建types.h并将其包含的示例。 由于代码较长,这里只给出关键修改: 创建types.h: ```c #ifndef TYPES_H #define TYPES_H typedef signed char s8; typedef unsigned char u8; typedef signed short s16; typedef unsigned short u16; typedef signed long s32; typedef unsigned long u32; typedef float f32; typedef double f64; #endif ``` 在ds18b20.c文件开头添加: ```c #include "types.h" ``` 在public.c文件开头添加: ```c #include "types.h" ``` 然后,检查public.c中的变量声明。例如,对于第157行错误错误 C202: ‘u32’: 未定义的标识符 -> 现在应该解决了。 第157行可能是:`u32 period;` -> 在包含types.h后,这里应该没问题。 对于第160行:错误 C202: ‘period’: 未定义的标识符 -> 如果这行是使用period,那么可能是因为period的作用域问题。如果period是在函数内部定义的局部变量,那么在使用它的函数内部,它必须在语句之前声明。 例如: void foo() { // 一些代码 period = ...; // 错误,如果之前没有声明period } 修正:在函数开头声明period。 另外,对于public.c的第34行:`u32 integer;` 现在应该没有错误了。 但是,第41行:`integer = ...` 和 `decimal = ...` 这些错误是因为在函数内部使用了未声明的变量。我们需要确定这些变量应该是局部变量还是全局变量,然后进行声明。 假设public.c中有一个函数: void convert(float num) { integer = (u32)num; // 错误:integer未定义 decimal = num - integer; // 错误:decimal未定义 // ... } 修正:如果integer和decimal是全局变量,那么需要在函数外部声明(在public.c中作为全局变量定义);如果它们是局部变量,则在函数内部声明: void convert(float num) { u32 integer; // 局部变量 f32 decimal; integer = (u32)num; decimal = num - integer; // ... } 但注意,作为局部变量,它们的作用域仅在函数内部。 如果其他函数也需要访问这些变量,那么它们可能需要作为全局变量。根据具体需求决定。 由于错误信息中没有给出函数的具体上下文,所以我们需要根据实际情况调整。 最后,修正main.c第20行的语法错误。检查该行,确保语句正确结束(分号),括号匹配等。 希望这些修改能解决编译错误。 注意:在修改代码后,清理项目并重新编译。 由于我们无法获得具体代码,只能提供一般性指导。如果问题仍然存在,请检查具体的代码行。 如果上述方法不能解决,请提供具体代码片段以便进一步分析。 相关问题: §§相关问题§§: 1. 在C语言中,如何使用typedef定义新的数据类型? 2. 在嵌入式编程中,为什么经常使用u8、s16、u32这样的类型? 3. 全局变量和局部变量有什么区别?使用全局变量时需要注意什么? 4. 在多个源文件中共享全局变量,应该如何声明和定义? </think> ### 错误分析与解决方案 您遇到的编译错误主要集中在**未定义标识符**和**语法错误**上,主要问题在于缺少必要的类型定义和变量声明。以下是详细解决方案: --- ### 1. **核心问题:缺少类型定义** 错误如 `'s16': 未定义的标识符` 和 `'u32': 未定义的标识符` 表明项目缺少标准类型定义(如 `s16`、`u32`)。 **解决方案**:创建 `types.h` 头文件定义嵌入式开发常用类型。 ```c /* types.h */ #ifndef TYPES_H #define TYPES_H typedef signed char s8; typedef unsigned char u8; typedef signed short s16; typedef unsigned short u16; typedef signed long s32; typedef unsigned long u32; typedef float f32; typedef double f64; #endif ``` --- ### 2. **DS18B20 模块修正** **原始错误**: ```c // DS18B20.c s16 temp; // 错误:s16 未定义 float value; // 错误:value 未定义(实际是因前一行错误引发的连锁错误) ``` **修正代码**: ```c /* DS18B20.c */ #include "DS18B20.h" #include "types.h" // 添加类型定义头文件 // 显式声明变量(确保作用域正确) s16 temp; f32 value; // 使用f32代替float(与types.h一致) float DS18B20_GetTemp() { // 函数实现中使用 temp 和 value return value; } ``` --- ### 3. **Public 模块修正** **原始错误**: ```c // Public.c u32 integer; // 错误:u32 未定义 f32 decimal; // 错误:decimal 未定义 u32 period; // 错误:u32 未定义 int display_mode; // 错误未定义标识符 ``` **修正代码**: ```c /* Public.c */ #include "Public.h" #include "types.h" // 添加类型定义头文件 // 声明全局变量(需确保在头文件中用 extern 声明) u32 integer; f32 decimal; u32 period; int display_mode; // 添加缺失的变量声明 void Public_Function() { // 使用 integer, decimal 等变量 } ``` **在 `Public.h` 中添加全局变量声明**: ```c /* Public.h */ #pragma once #include "types.h" extern u32 integer; // 其他文件通过 extern 引用 extern f32 decimal; extern u32 period; extern int display_mode; ``` --- ### 4. **Main 模块语法错误修正** ```c // Main.c 第 20 行 int main() { int a = 5 // 错误:缺少分号(典型 C141 错误) return 0; } ``` **修正**: ```c int main() { int a = 5; // 在行尾添加分号 return 0; } ``` --- ### 完整解决流程 1. **创建 `types.h`** 定义 `s8/u8/s16/u16/s32/u32/f32/f64` 等类型。 2. **在所有源文件中包含 `types.h`** 在 `main.c`、`DS18B20.c`、`Public.c` 顶部添加: ```c #include "types.h" ``` 3. **声明所有全局变量** - 在 `.c` 文件中定义全局变量(分配内存) - 在 `.h` 文件中用 `extern` 声明(供其他文件引用) 4. **检查语法细节** - 确保每行语句以 `;` 结尾 - 检查括号匹配 `{}` 和 `()` --- ### 修正后的文件结构示例 ``` 项目根目录/ ├── main.c ├── types.h # 新增 ├── APP/ │ └── DS18B20/ │ ├── DS18B20.c # 修正后 │ └── DS18B20.h └── PUBLIC/ ├── Public.c # 修正后 └── Public.h # 添加 extern 声明 ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值