二类编译错误的解决方法
Ⅰ dev c++编译错误
代码太长,没有注释,你又没有说明程序的各个结构和各个函数是做什么的,弄懂你的代码需要时间太长了。
不过,还是能给你的改掉以上的错误的,
typedef struct
{
VertexType adjvex;
VRType lowcost;
}minside[MAX_VERTEX_NUM];
改为
typedef struct
{
VertexType adjvex;
VRType lowcost;
}minside;
改minimum函数为,其他函数也类似
int minimum(minside SZ[],MGraph G)
Ⅱ 为什么我在VB中输入一段程序,显示的是编译错误,类型不匹配呢
Function tucengshu(y1 As Double, x0 As Double, y0 As Double, hd() As Double) As Double
Dim x() As Double, y() As Double
R = Sqr(x0 * x0 + y0 * y0)
a = 1
b = -2 * x0
c = x0 * x0 + y1 * y1 - 2 * y0 * y1 + y0 * y0 - R * R
d = b * b - 4 * a * c
x = (-b + Sqr(d)) / (2 * a)'--------------------1此处错误:x 应是个数组
For i = 1 To 100
x(i) = (x / 1000) * (i)‘--------------------------2此处错误:x 应是个数组
Next i
For i = 1 To 1000
a = 1
b = -2 * y0
c = y0 * y0 + x(i) * x(i) - 2 * x0 * x(i) + x0 * x0 - R * R
d = b * b - 4 * a * c
y(i) = (-b - Sqr(d)) / (2 * a)
Next i
lowy = y(1)
For i = 1 To 1000
If m > y(i) Then'--------------3此处错误:if...then....使用不合法
m = y(i)
Next i
c = x0 * x0 + lowy * lowy - 2 * y0 * lowy + y0 * y0 - R * R
d = b * b - 4 * a * c
lowx = (-b + Sqr(d)) / (2 * a)
For i = 1 To n
tuchengshu = i
If hd(i + 1) <= lowy And lowy < hd(i) Then'--------------4此处错误:if...then....使用不合法
Exit For
Next i
End Function
Private Sub command1_click()
Dim y1 As Double, x0 As Double, y0 As Double, hd() As Double, n As Integer
y1 = InputBox("请输入y1的值", "y1")
x0 = InputBox("请输入x0的值", "x0")
y0 = InputBox("请输入y0的值", "y0")
n = InputBox("请输入土层数", "土层数")
For i = 1 To n
ReDim hd(i)
hd(i) = InputBox("请输入第" & i & "层土的顶标高", "顶标高")
Next i
Print "土层数为" & tucengshu(y1, x0, y0, hd())
End Sub
--------------------------------------- 分析------------------------
1、2、从内容上看X应是个单一的变量(本人理解),而不是个数组变量。
解决方法:另外用一个变量名,如 e
3、4、if....then....使用方法:
一类:if .... then .....
如:
if a>b then b=a
二类:if.....then......end if
如:
if a>b then
b=a
end if
三类(请自学)
解决方法:
3、
If m > y(i) Then
m = y(i)
修改为:
If m > y(i) Then m = y(i)
4、
If hd(i + 1) <= lowy And lowy < hd(i) Then
Exit For
修改为:
If hd(i + 1) <= lowy And lowy < hd(i) Then Exit For
Ⅲ 程序编译错误不知道是什么原因
不能通编译过的程序实际上还不是合法的程序,因为它不满足c语言对于程序的基本要求。
检查语法错误的第一要义:集中力量检查系统发现的第一个错误,弄清并改正它。
在编译过程中系统发现的错误主要有两类:基本语法错误和上下文关系错误。这些错误都在表面上,可以直接看得见。也是比较容易弄清,比较容易解决的。关键是需要熟悉C语言的语法规定和有关上下文关系的规定,按照这些规定检查程序正文,看看存在什么问题。
编译中系统发现错误都能指出错误的位置。不同系统在这方面的能力有差异,在错误定位的准确性方面有所不同。有的系统只能指明发现错误的行,有的系统还能够指明行内位置。
一般说,系统指明的位置未必是真实错误出现的位置。通常情况是错误出现在前,而系统发现错误在后,因为它检查到实际错误之后的某个地方,才能确认出了问题,因此报出错误信息。要确认第一个错误的原因,应该从系统指明的位置开始,在那里检查,并从那里开始向前检查。
系统的错误信息中都包含一段文字,说明它所认定的错误原因。应该仔细阅读这段文字,通常它提供了有关错误的重要线索。但也应该理解,错误信息未必准确,有时错误确实存在,但系统对错误的解释也可能不对。也就是说,在查找错误时,既要重视系统提供的错误信息,又不应为系统的错误信息所束缚。
发现了问题,要想清楚错误的真正原因,然后再修改。不要蛮干。在这时的最大诱惑就是想赶快改,看看错误会不会消失。但是蛮干的结果常常是原来的错误没有弄好,又搞出了新的错误。
另一个值得注意的地方:程序中的一个语法错误常常导致编译系统产生许多错误信息。如果你改正了程序中一个或几个错误,下面的弄不清楚了,那么就应该重新编译。改正一处常常能消去许多错误信息行。
解决语法错误
常见语法错误:
1)缺少语句、声明、定义结束的分号。
2)某种括号不配对。C语言中括号性质的东西很多,列举如下:
( ), [ ], { }, ' ', " ", /* */
在不同位置的括号不配对可能引起许多不同的错误信息。
3)关键字拼写错误。
较难认定的典型错误:
1)宏定义造成的错误。这种东西不能在源程序文件中直接看到,是在宏替换之后出现的。常见的能引起语法错误的宏定义错误:宏定义中有不配对的括号,宏定义最后加了不该有的分号,……
解决上下文关系错误
1)变量没有定义。产生这个问题的原因除了变量确实没有大意外,还可能是变量的拼写错误,变量的作用域问题(在不能使用某个变量的地方想去用那个变量)。
2)变量重复定义。例如在同一个作用域里用同样名字定义了两个变量,函数的局部变量与参数重名等。
3)函数的重复定义。可能是用同一个名字定义了两个不同的函数。或者是写出的函数原型在类型上与该函数的定义不相符。有时没有原型而直接写函数调用也可能导致这种错误信息,因为编译程序在遇到函数调用而没有看到函数原型或函数定义时,将给函数假定一个默认原型。如果后来见到的函数定义与假定不符,就会报告函数重复定义错误。
4)变量类型与有关运算对运算对象或者函数对参数的要求不符。例如有些运算(如 %)要求整数参数,而你用的是某种浮点数。
5)有些类型之间不能互相转换。例如你定义了一个结构变量,而后要用它给整数赋值。系统容许的转换包括:数值类型之间的转换,整数和指针之间的转换,指针之间的转换。其余转换(无论是隐含的,还是写出强制)都不允许。参见《C语言程序设计》(K&R)197-199页。
如何看待编译警告
当编译程序发现程序中某个地方有疑问,可能有问题时就会给出一个警告信息。警告信息可能意味着程序中隐含的大错误,也可能确实没有问题。对于警告的正确处理方式应该是:尽可能地消除之。对于编译程序给出的每个警告都应该仔细分析,看看是否真的有问题。只有那些确实无问题的警告才能放下不管。
注意:经验表明,警告常常意味着严重的隐含错误。
常见警告:
1)(局部自动)变量没有初始化就使用。如果对局部指针变量出现这种情况,后果不堪设想。对于一般局部自动变量,没有初始化就使用它的值也不会是有意义的。
2)在条件语句或循环语句的条件中写了赋值。大部分情况是误将 == (等于判断)写成 = 了。这是很常见的程序错误,有些编译程序对这种情况提出警告。
Ⅳ 新手在学习c语言并编译程序时编译错误怎么办
1、确定出错的行号
如果是一个比较好的集成编译环境的话,一般双击编译错误,鼠标都会自动跳转到该行并高亮显示。
没有这个功能也没关系,编译错误里面也都会有说明某某.c,某某行出的问题
1>e:\visual studio 2005\projects\airplane\airplane\airplane.cpp(52) : error C2065: 'abc' : undeclared identifier
这个就是说明在airplane.cpp的52行有错误
2、多个错误的话,一般只处理第一个错误
如果一次打出很多错误的话,不需要每一个都处理,只处理第一个编译错误,然后再次编译。大部分的时候,都是由于第一个错误产生了后续很多错误,第一个错误解决之后,其他错误也就迎刃而解。
3、对错误的更改
一般就是看错误的编号和后续的英文说明,如上面的错误,错误编号是C2065,错误的解释是'abc' : undeclared identifier,未定义的标示符,将abc定义即可。
错误的种类很多,一般看英文就可以解决,如果解决不了的话,推荐根据错误编号上网搜索一下解决方法就OK拉。
Ⅳ c++编程错误列表及解决方案
C++常见编译/链接错误及其解决办法
1. 解决error LNK2005: ___crtExitProcess 已经在 LIBCMTD.lib(crt0dat.obj) 中定义
有的时候, 在 Debug 模式下编译没问题, 换到 Release 模式就发生一堆问题.
典型的例子, 就是因为 c++ runtime library 设定不同, 所造成的重复定义连结错误.
而另一个常见的例子是 专案与 library 使用不同的字符集合设定
(如: 一个用 Unicode Character Set, 另一个用 Multi-Byte Character Set)
这个错误发生原因, 有可能是
1. 你 link 的 lib 使用 C++ Multi-threaded DLL (/MD)
2. 而你的 source 使用的 C++ runtime library 是 Multi-threaded (/MT)
导致重复定义
解决方法:
两个使用相同的 C++ runtime library.例如都使用 static 的 Multi-threaded (/MT).
2. 错误 1error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) 已经在 LIBCMT.lib(typinfo.obj) 中定义 MSVCRTD.lib
项目 -> 属性 -> c/C++ -> 代码生成 -> 运行时库 设置为: 多线程调试 DLL (/MDd)
被引用的库和调用的程序编译选项不同,需要改成一致后编译
3.#pragma once与 #ifndef的区别
为了避免同一个文件被include多次
1 #ifndef方式
2 #pragma once方式
在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。
方式一:
#ifndef __SOMEFILE_H__
#define __SOMEFILE_H__
... ... // 一些声明语句
#endif
方式二:
#pragma once
... ... // 一些声明语句
#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况
#pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的奇怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。
方式一由语言支持所以移植性好,方式二 可以避免名字冲突
4.error LNK2019: 无法解析的外部符号 __imp__PathCombineW
PathCombine是Shell api 需要引入库#pragma comment( lib, "shlwapi.lib")
5.error C2662: "MyClass::GetName()”: 不能将“this”指针从“const MyClass”转换为“MyClass &”
bool MyClass::operator==(const MyClass* n1) const
{return GetName() == n1->GetName();}
原因是不能在const函数中调用对象的非const方法,MyClass中的GetName()必须是const的。
6.template 模板
模板声明和定义必须在同一个文件中,而且只有实例话模板类型时才编译模板实例
7.error C2275: “MyClass”: 将此类型用作表达式非法 MyClass.Instance();
原因:Instance是静态方法,用.引用会出错。应该是MyClass::Instance()
8.error LNK2019: 无法解析的外部符号 "public: __thiscall MyClass(void)
原因:只声明了构造函数,MyClass(); ,但未定义。 可以定义空函数,或者直接注释掉,使用默认构造函数。
9.error C2504: “testing”: 未定义基类
class PackToolTest : testing.Test {}
原因:Test是testing命名空间下的一个类,需要用域操作符,testing::Test
还有一个问题,缺少基类继承权限(public、protected、private)
10.error C2864: “MyClass::_nullpack”: 只有静态常量整型数据成员才可以在类中初始化
class MyClass {string _nullpack = "test";}
原因:c++ 中,成员变量不能在声明时初始化,而是在构造函数初始化列表中先初始化
11.error LNK2019: 无法解析的外部符号_WinMain@16int main()
原因:由于创建的是Win32 Project,和Win32 console Project的链接库不同
方法1:在程序最开始的地方加上以下语句
#pragma comment(linker, "/subsystem:console ")
方法2:project > > setting > > 在link 的project options 中将/subsystem:windows(console)删了
12.类似“已经在 msvcprtd.lib(MSVCP80D.dll) 中定义”问题
vs2005 Debug /Release需要分别配制
分析一下错误来源,会发现:
1. 错误来源主要是重复定义的问题,而且重复定义的基本上都是VC Runtime和Standard C++ Library中的函数
2. LIBCMT和LIBCPMT为Release下的Lib,本来不应该出现在Debug版本的链接的Lib中
3. 重复定义的问题主要出现在:LIBCMT, LIBCPMT, MSVCPRTD, MSVCRTD
来看看出问题的LIB是那些:
1. LIBCMT:C Runtime库的多线程静态链接的Release版本
2. LIBCPMT:C++ Standard Library的多线程静态链接的Release版本
3. MSVCPRTD:C++ Standard Library的多线程DLL的Debug版本
4. MSVCRTD:C Runtime Library的多线程DLL的Debug版本
当 前我们的配置是多线程DLL的Debug版,因此3和4是应该出现在link的列表中的,不属于多余。而后两者则是只是当多线程静态链接Release版 中才会出现。这提示我在项目中加入的ANTLR.LIB可能是造成这个问题的根源,因为静态库的编译选项很容易和主程序发生冲突,并且根据实际信息我们可 以看出ANTLR.LIB应该是用多线程静态链接的Release版本来编译的。
解决方法:
1、首先查看编译项目依赖的其他项目的运行时库是否一致
2、如果不一致,改为同样的运行时库,如在下编译的是:“多线程调试 DLL (/MDd)”,现在需要把所有的依赖项目的运行时库都改为一致的库,就OK了。
13.error C2143: 语法错误 : 缺少“;”(在“*”的前面)
原因:产生错误处,某类型未include,可能头文件名拼写错误、头文件名已更改
14.error C2572: “MyClass::Invoke”: 重定义默认参数 : 参数 2
string MyClass::Invoke(const CParam& paraObj, INVOKETYPE type = ASYN)
原因:默认参数,只需在声明时指定。方法定义的时候无需指定默认参数。
string MyClass::Invoke(const CParam& paraObj, INVOKETYPE type /*= ASYN*/)
{ ... }。。。。。
希望对你有用
Ⅵ EXCEL提示隐含模块中的编译错误该怎么解决
“EXCEL隐含模块中的编译错误:设表格式”时,可能是由于如下的原因引起的。
一、错误的宏代码
表格中可能引用到宏,要么是宏代码有错误,要么是宏根本就不存在,或者是宏代码中所引用的模块不存在所引起的。
遇到这种情况,最好的办法就是把宏给删除。
方法很简单:按下组合键
Alt
+
F11
进入VBA窗口,找到ThisWorkBook,接着往下找,就能找到代码了,然后删除。
二、重新设置系统帐户
遇到这种问题,最麻烦的就是重新安装OFFICE也是于事无补的,无论怎么弄,都是原来的错误。
最有效的解决办法就是,给系统重新设置一个帐户,使用该帐户登陆系统,就能正常使用EXCEL文件了。
三、其它的解决办法
①恢复EXCEL到默认状态
1、删除C:Program
FilesMicrosoft
OfficeOFFICE11XLSTART
目录下的宏文件(可先备份)
(OFFICE11为OFFICE2003的目录)
2、如果1无效,删除注册表HKEY_CURRENT_USERSoftwareMicrosoftOffice下的EXCEL项,以及11.0下的EXCEL项,重新打开后EXCEL会恢复到新装时的状态下。
②让EXCEL自动恢复默认状态
如果您可以正常打开EXCEL,那么,先打开EXCEL,选择帮助里的"检测并恢复",点"开始"就可以,这样可以恢复。
Ⅶ 编译器错误怎么解决
1、分析原因,这样的错误出现一般是由于服务器拒绝了某一项请求,常见的是写入,所以问题在有表单输入的网页中更容易出现。


