编程报错语句(编程赋值语句)

2024-01-03 12:21:42 数码极客 bianji01

 

PYTHON编程 IF-elif语句报错.句法感觉没有问题?(或者是有问题我看不出来)纯萌新求教

要连着输入,开头没有三个点之后代表这个语句块结束了:

c++编程错误列表及解决方案

C++常见编译/链接错误及其解决办法

1.解决errorLNK2005:___crtExitProcess已经在LIBCMTD.lib(crt0dat.obj)中定义

有的时候,在Debug模式下编译没问题,换到Release模式就发生一堆问题.

典型的例子,就是因为c++runtimelibrary设定不同,所造成的重复定义连结错误.

而另一个常见的例子是专案与library使用不同的字元集合设定

(如:一个用UnicodeCharacterSet,另一个用Multi-ByteCharacterSet)

这个错误发生原因,有可能是

1.你link的lib使用C++Multi-threadedDLL(/MD)

2.而你的source使用的C++runtimelibrary是Multi-threaded(/MT)

导致重复定义

解决方法:

两个使用相同的C++runtimelibrary.例如都使用static的Multi-threaded(/MT).

2.错误1errorLNK2005:"private:__thiscalltype_info::type_info(classtype_infoconst&)"(??0type_info@@AAE@ABV0@@Z)已经在LIBCMT.lib(typinfo.obj)中定义MSVCRTD.lib

项目->属性->c/C++->代码生成->运行时库设置为:多线程调试DLL(/MDd)

被引用的库和调用的程序编译选项不同,需要改成一致后编译

3.#pragmaonce与#ifndef的区别

为了避免同一个文件被include多次

1#ifndef方式

2#pragmaonce方式

在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。

#ifndef__SOMEFILE_H__

#define__SOMEFILE_H__

......//一些声明语句

#endif

#pragmaonce

......//一些声明语句

#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。当然,缺点就是如果不同头文件的宏名不小心“撞车”,可能就会导致头文件明明存在,编译器却硬说找不到声明的状况

#pragmaonce则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。带来的好处是,你不必再费劲想个宏名了,当然也就不会出现宏名碰撞引发的怪问题。对应的缺点就是如果某个头文件有多份拷贝,本方法不能保证他们不被重复包含。当然,相比宏名碰撞引发的“找不到声明”的问题,重复包含更容易被发现并修正。

方式一由语言支持所以移植性好,方式二可以避免名字冲突

4.errorLNK2019:无法解析的外部符号__imp__PathCombineW

PathCombine是Shellapi需要引入库#pragmacomment(lib,"shlwapi.lib")

5.errorC2662:"MyClass::GetName()”:不能将“this”指针从“constMyClass”转换为“MyClass&”

boolMyClass::operator==(constMyClass*n1)const

{returnGetName()==n1->GetName();}

原因是不能在const函数中调用对象的非const方法,MyClass中的GetName()必须是const的。

6.template模板

模板声明和定义必须在同一个文件中,而且只有实例话模板类型时才编译模板实例

7.errorC2275:“MyClass”:将此类型用作表达式非法MyClass.Instance();

原因:Instance是静态方法,用.引用会出错。应该是MyClass::Instance()

8.errorLNK2019:无法解析的外部符号"public:__thiscallMyClass(void)

原因:只声明了构造函数,MyClass();,但未定义。可以定义空函数,或者直接注释掉,使用默认构造函数。

9.errorC2504:“testing”:未定义基类

classPackToolTest:testing.Test{}

原因:Test是testing命名空间下的一个类,需要用域操作符,testing::Test

还有一个问题,缺少基类继承权限(public、protected、private)

10.errorC2864:“MyClass::_nullpack”:只有静态常量整型数据成员才可以在类中初始化

classMyClass{string_nullpack="test";}

原因:c++中,成员变量不能在声明时初始化,而是在构造函数初始化列表中先初始化

11.errorLNK2019:无法解析的外部符号_WinMain@16intmain()

原因:由于创建的是Win32Project,和Win32consoleProject的链接库不同

方法1:在程序最开始的地方加上以下语句

#pragmacomment(linker,"/subsystem:console")

方法2:project>>setting>>在link的projectoptions中将/subsystem:windows(console)删了

12.类似“已经在msvcprtd.lib(MSVCP80D.dll)中定义”问题

vs2005Debug/Release需要分别配制

分析一下错误来源,会发现:

1.错误来源主要是重复定义的问题,而且重复定义的基本上都是VCRuntime和StandardC++Library中的函数

2.LIBCMT和LIBCPMT为Release下的Lib,本来不应该出现在Debug版本的链接的Lib中

3.重复定义的问题主要出现在:LIBCMT,LIBCPMT,MSVCPRTD,MSVCRTD

来看看出问题的LIB是那些:

1.LIBCMT:CRuntime库的多线程静态链接的Release版本

2.LIBCPMT:C++StandardLibrary的多线程静态链接的Release版本

3.MSVCPRTD:C++StandardLibrary的多线程DLL的Debug版本

4.MSVCRTD:CRuntimeLibrary的多线程DLL的Debug版本

当前我们的配置是多线程DLL的Debug版,因此3和4是应该出现在link的列表中的,不属于多余。而后两者则是只是当多线程静态链接Release版中才会出现。这提示我在项目中加入的ANTLR.LIB可能是造成这个问题的根源,因为静态库的编译选项很容易和主程序发生冲突,并且根据实际信息我们可以看出ANTLR.LIB应该是用多线程静态链接的Release版本来编译的。

解决方法:

1、首先查看编译项目依赖的其他项目的运行时库是否一致

2、如果不一致,改为同样的运行时库,如在下编译的是:“多线程调试DLL(/MDd)”,现在需要把所有的依赖项目的运行时库都改为一致的库,就OK了。

13.errorC2143:语法错误:缺少“;”(在“*”的前面)

原因:产生错误处,某类型未include,可能头文件名拼写错误、头文件名已更改

14.errorC2572:“MyClass::Invoke”:重定义默认参数:参数2

stringMyClass::Invoke(constCParam¶Obj,INVOKETYPEtype=ASYN)

原因:默认参数,只需在声明时指定。方法定义的时候无需指定默认参数。

stringMyClass::Invoke(constCParam¶Obj,INVOKETYPEtype/*=ASYN*/)

{...}。。。。。

希望对你有用

用VBA于ACCESS中编程报错:INSERT INTO语句的语法错误

关于c++提示的错误语句

要看看代码。

好像是你用了非法字符,像中文的"“".

声明:易趣百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系315127732@qq.com
广告位招租
横幅广告