QT编译运行报错信息和解决方法

本文记录日常工作中使用Qt Creator开发时遇到的报错,以及解决办法,因同一个报错可能的原因很多,这里只是部分解决思路。

taking address of temporary

报错代码:domElem = & (node.toElement());node为形参引用,报错大意是对临时变量取地址,返回后临时变量消失导致地址失效,使用非const引用引用返回的临时变量地址是确实不被允许的,但是在VS2013环境不报错,原因是这是VS2013的非标准扩展(默认打开,可关闭),自动在多种情况下扩展了被引用对象的生命周期;
MGW解决方案,定义一个临时变量做过度:

QDomElement t_QDomElement ;
t_QDomElement  = node.toElement();
domElem  = &t_QDomElement ;

multiple definition of

重定义错误,造成这个错误的原因很多,这次遇到的是重复定义的类在pro文件被多次包含。

undefined refernce to

1、结构体定义问题,名字前面加了CORESHARED_EXPORT,去掉;
2、库引用错误,mgw用的库也必须是mgw编译的,重新编译依赖库,注意mgw编译库是.a,不是.lib,pro文件需要包含 LIBS += $$LIBPATH/libbase.a
3、pro文件加 libs += -L . -l ws2_32
4、看下类所在的h和cpp文件是否包含在pro文件里,或者是否被条件屏蔽

was not declared in this scope

1、变量名前加命名空间::
2、定义的函数要在调用前声明,或者写在调用前面

invalid initialization of non-const reference of type * from an rvalue of type *

C++不允许临时对象被修改或者重新赋值,所以对临时对象的引用必须是const类型,解决方法,删掉&引用符号,或在变量前加const;

undefined reference to `AcceptEx@32’

pro文件加LIBS +=-lmswsock;

need ‘typename’ before * beacuse * is a dependent scope

声明模板中依赖名是类型名,前面加typename

程序异常结束

debug编译正常,运行时崩溃,报错信息“程序异常结束”,在main.cpp打断点,也会报“the cdb process terminated”;
排查中发现release版可以正常运行,debug版运行崩溃,初步判断是依赖库有问题,查看pro文件,debug模式下调用的release版的依赖库导致崩溃,在pro文件中加版本判断解决:
CONFIG(debug,debug|release){
//debug版依赖库
}
else{
//release版依赖库
}

猜你喜欢

转载自blog.csdn.net/weixin_40355471/article/details/109292911
今日推荐