
C/C++
caz28
C是俺吃饭的家伙,C++也偶尔用用,Python是我最喜欢用的脚本。
本人一直从事嵌入式开发,喜欢尝试新鲜技术,希望与热爱编程的朋友共同交流进步。
展开
-
undefined reference to `glutInit‘
链接出错,提示一堆“undefined reference to”,但实际所有库都有。原因:gcc后面参数顺序很重要, -l 不能放到 -o前面。原创 2025-01-10 16:42:32 · 202 阅读 · 0 评论 -
C支持,而C++不支持的非平凡的指定初始化。
编译提示:non-trivial designated initializers not supported。用下标指定初始化,在C里是支持的,C++不支持。在vc和gcc/g++上验证通过。翻译:不支持非平凡的指定初始化器。改为c程序,用gcc编译通过。原创 2024-12-05 22:29:11 · 243 阅读 · 0 评论 -
从QModelIndex得到一个QStandardItem*
因为这两个表格有关联,比如A3和A5关联,A5值时A3两倍,我希望我修改A3时,A5的值,也改为A3的两倍。修改A5时,A3也同样改为A5的1/2.但用这个index,通过model->itemFromIndex(index),得到的item是nullptr。界面上是一个电子表格,点击其中一个表格时,我希望根据这个表格的修改,同时更新另一个表格内容。在QLineEdit的textChanged消息里,这样就拿到正确的item了。原创 2024-10-24 15:49:55 · 211 阅读 · 1 评论 -
C++ socket编程(3)
介绍了一个简单socket通讯Demo, 客户端和服务器进行简单的交互。两个代码都很简单,如果情况一复杂,就会出错。这节我们把代码完善一下,实现一个客户端输入,发送,服务器echo的交互。本文介绍客户端代码修改。这里等1分钟,如果服务器还是没起来,就退出了。客户端其他函数修改同服务器端,可以看。原创 2024-10-11 01:20:02 · 397 阅读 · 0 评论 -
C++ socket编程(2)
这节我们把代码完善一下,实现一个客户端输入,发送,服务器echo的交互。listen如果出错,返回-1,第二个参数是backlog,可排队个数,客户端connect,可以放到这个队列里,等待服务器accept。socket如果出错,Linux返回-1,Windows的SOCKET是unsigned,返回INVALID_SOCKET(~0).bind如果出错,返回SOCKET_ERROR(-1). 通常是端口占用,权限,地址错误等问题。前面代码很多函数都有返回值,我们都没有检查,完善代码,添加检查。原创 2024-10-11 00:44:32 · 465 阅读 · 0 评论 -
C++ socket编程(1)
然后客户端会与服务器进行10次交互,一个交互为:客户端发一个消息,服务器收到,原样返回给客户端,客户端收到,再发下一个消息。这里是一个socket编程Demo,不考虑出错情况,代码简单,便于了解socket流程。Demo分为服务器程序和客户端程序,运行需要先启动服务器程序,再启动客户端程序。主要交互在while里, 客户端这边是(发,收),服务器这边是(收, 发)。服务器会等待连接,客户端连接后,服务发送"connected."给客户端。10次交互完成,关闭链接,两边程序都结束。原创 2024-10-10 16:43:48 · 514 阅读 · 0 评论 -
Windows下多字节字符转宽字符
这个代码页都是指多字节字符串的代码页,MultiByteToWideChar的源字符串和WideCharToMultiByte的目标字符串的代码页。MultiByteToWideChar调用两遍,第一次调用,buff用的NULL,目的是计算转换后字符个数,便于申请内存。1. 调用A结尾的API, 使用多字节字符集函数处理后,转为Unicode字符串。2.调用W结尾的API,使用宽字符集函数处理后,就是Unicode字符串。说了一个奇怪的情况, API用的宽字符版本,代码却是使用多字节字符集。原创 2024-10-06 23:54:13 · 452 阅读 · 0 评论 -
UNICODE已定义,_tcs*函数却不是宽字符函数问题
一个比较大的项目,CMake里定义了UNICODE,调用Windows的API也是用W的版本。所以如果在CMake文件里定义UNICODE,在Windows下会出现这种矛盾,使用的是宽字符API,tchar函数却是多字节版本。所以CMake文件里,如果需要区分Unicode字符集或多字节字符集,只需要添加或不添加_UNICODE定义即可。可以看到定义了_UNICODE,UNICODE会自动定义,_MBCS自动去掉定义。从前面看,只定义UNICODE,会产生奇怪的情况,代码用的字符集是多字节字符集。原创 2024-10-06 23:16:37 · 263 阅读 · 0 评论 -
vscode运行已编译好的程序
假设我有一个项目,已经编译好了,需要调试,用gdb命令行调试不熟悉,还是用vscode来调试比较好。关键点:"preLaunchTask": "",这个是空的,就不会去编译了,直接运行。这个.env会设置环境变量。原创 2024-08-25 10:12:54 · 372 阅读 · 0 评论 -
生成带Debug信息的Release版本
有时候,我们在Debug版本运行正常的程序,在Release版本下运行却有问题。我们需要生成带Debug信息的Release版本,用于调试跟踪。Release版本添加Debug信息。这样生成的Release版本就可以调试跟踪了。原创 2024-08-25 09:09:17 · 315 阅读 · 0 评论 -
Makefile:87: *** 多个目标匹配。 停止。
我是在Linux上编译,后来发现,这个目录在windows下编译过,下面目录里都有Makefile,Makefile.Debug,Makefile.Release等文件。qmake生成的Makefile完全没有问题。根据网上搜索结果,1.回车问题。2.空格、TAB问题。删除了这些文件后,再qmake,make,就通了。make时出现上面的多个目标匹配问题。原创 2024-08-15 20:38:24 · 294 阅读 · 0 评论 -
hdf5文件node name长度可以支持多长?
根据HDF5库的规范,节点名称是一个UTF-8编码的字符串,没有固定的长度限制。这意味着你可以使用非常长的字符串作为节点名称,但请注意,过长的节点名称可能会导致一些实施上的限制或不便。因此,根据你的具体需求,你可以权衡节点名称的长度和对存储空间和性能的影响。请注意,虽然理论上节点名称的最大长度是128个字符,但在实际应用中,可能还需要考虑其他因素,例如文件系统的限制或操作系统的限制。手机上文心一言说是255,网页上是接着上面问的,回答是“HDF5节点名称的最大长度是。节点名称的最大长度是128个字符。原创 2024-02-04 17:28:50 · 249 阅读 · 0 评论 -
ifstream::tellg() 返回-469
使用过程中发现,tellg()返回的位置,有时有效,有时无效,第一次是返回0,后面文件有输入后,再次读取前,调用tellg(),有时返回-469,有时返回正的位置。一个程序输出一个文件,另一个程序打开这个文件,读入内容。读入过程中,需要记录读取位置,使用tellg()获取读取位置, 以便后面用seekg重新定位读取。经过多次摸索,结合网上搜索,发现windows下,ifstream只有用二进制模式打开文件,tellg才能返回正确的位置。原创 2024-02-01 01:50:12 · 476 阅读 · 1 评论 -
Qt的信号和槽
function1会在moc_xxx.cpp里生成。连接,一般在B类里,或任何能执行到的地方。假设A是发信号的类,B是收信号的类。原创 2023-12-12 14:01:30 · 102 阅读 · 0 评论 -
Windows编译动态库没有生成.lib文件问题
最近修改了一个项目,以前生成静态库,后改为生成动态库,在Linux上没有问题,但在Windows上只生成了.dll文件,没有生成.lib文件。后来找到原因,代码里没有dllexport声明,没有东西导出,所以才没有生成.lib文件。文件除了可以用作静态链接库外,还有另一种用途,就是用作动态链接库(这样就跟Linux一样,类和函数全导出了。在Windows中,原创 2023-12-12 13:40:45 · 1911 阅读 · 0 评论 -
system在client端运行正常,在server端运行失败问题
在windows上,不切换盘符,cd是不能到达对应目录的。server端运行的环境不同,默认在c盘,client端运行时,正好在d盘。使用system(command.c_str()), 同样的command,在client端运行正常,在server端运行却失败。原创 2023-08-17 14:54:36 · 139 阅读 · 0 评论 -
列出make中的所有目标
用下面命令可以列出make中的所有目标,测试可用。原创 2023-07-17 14:47:20 · 823 阅读 · 1 评论 -
Windows - 如何判断一个DLL已经注册
如果返回0个匹配,则没有注册,有匹配,则注册过了。通过上面两个命令,可以验证一下。原创 2023-07-17 14:35:19 · 2835 阅读 · 0 评论 -
specialization of xxx after instantiation
这个有时跟编译选项有关,release编译有这个问题,debug没有。编译出现这个错误,原因是特化模板放到模板调用后面了。原创 2023-07-14 16:11:42 · 792 阅读 · 0 评论 -
Ubuntu下编译VTK
到VTK源码的build目录(这个是第5步自己建的目录),打开终端,输入make,就可以编译了。5.打开cmake-gui,设置源码路径,编译输出路径,在源码里建一个build目录,用于存放输出。9.有红色不要紧,毕竟这些Qt目录都找到了,再次点击Configure,这次没有红色了。编译会有点小错误,是某个Qt头文件没有包含,大概两三个文件需要修改,改了就可以编译过了。6.选择QT,Rendering,StandAlone,点击Configure。1.先安装QT,不知道不装行不行,我们项目需要。原创 2023-06-30 00:44:44 · 1574 阅读 · 1 评论 -
判断系统大小端的函数
【代码】判断系统大小端的函数。原创 2023-06-29 23:41:32 · 125 阅读 · 0 评论 -
libiconv库转换字符串出现BOM问题
使用iconv转换字符编码,经常出现转出的字符串带BOM头的问题。经过测试,发现unicode编码用“utf-32”或“utf-16”,转出或转入,得到的字符串有BOM,而用“utf-32le”、“utf-32be”、“utf-16le”、“utf-16be”这样的,就不会有BOM。所以需要明确告知iconv,编码的endian,否则转出来的字符串带BOM.原创 2023-06-29 23:17:30 · 265 阅读 · 0 评论 -
Visual Studio 设置函数断点
调试c++程序,有第三方库,只有头文件,没有源代码,怎么在调用库函数时打断点?在每个调用地方打断点比较麻烦。还有一个是加个接口层,在接口层上打断点,代码比较久了,有很多调用,修改量很大。用Visual Studio可以打函数断点,“调试”-“新建断点”-“函数断点”。因为微软的网站上是错误的,所以写下来,记录一下。就是只能有参数类型,不能有变量名。原创 2023-06-06 11:20:29 · 768 阅读 · 0 评论 -
智能指针,作为函数参数怎么用?
通过上面代码运行,可以发现只有fun1的指针引用在函数调用后有变化。所以智能指针作为函数参数的正确用法,就是传值使用。用智能指针的引用、指针都是不对,无法实现智能指针的引用计数效果。智能指针作为C++很重要的东西,被广泛使用。当智能指针被作为函数参数使用时,应该怎样使用呢?原创 2023-04-09 23:14:01 · 1629 阅读 · 0 评论 -
DLL相关问题
后来我在dll里导出一个返回函数指针的函数,这个函数指针指向一个返回智能指针的函数,我先get第一个函数,执行得到返回智能指针的函数,执行得到返回的dll里的智能指针。反过来,从dll里返回一个该类的对象指针,在exe里执行该类的成员函数,会执行exe里类的成员函数,成员变量是从dll里传入的。在exe里把该类的一个对象的指针,传给一个dll里导入的函数,在该函数里,调用该类的成员函数会有什么结果?一开始我在dll里导出一个返回智能指针的指针的函数,执行后,这个从dll里返回的智能指针就析构了。原创 2023-03-16 17:04:54 · 522 阅读 · 3 评论 -
服务程序调试
这次调试的代码是一个服务程序,就是一个exe,它是由其他程序通过CreateProcess调用的。原创 2023-03-16 11:15:56 · 86 阅读 · 0 评论 -
VS中C++程序报错:应输入声明
一个头文件,从别的项目copy过来的,某个地方有个红线,提示“应输入声明”,代码很简单,没看出什么问题,就随便输入点东西,再删除,错误消失了。原因不明,不过这个头文件肯定没有问题。原创 2023-03-07 21:21:45 · 4780 阅读 · 1 评论 -
需要使用新应用以打开此ms-gamingoverlay链接
ms-gamingoverlay原创 2023-02-10 14:32:27 · 15617 阅读 · 0 评论 -
有选择地打印log
先运行,需要打印log时,在if(debug)这里加断点,中断后,修改debug为true,就打印出来需要的log了,可以多次打印,后打印的会添加到文件后面。原创 2023-01-31 17:59:34 · 134 阅读 · 0 评论 -
GoogleTest运行特定的测试用例
googletest,单元测试,单独执行某个特定case。原创 2023-01-09 18:17:44 · 7093 阅读 · 0 评论 -
透视投影函数的图像
透视投影函数的图像,点到相机的距离转换为ndc的z坐标的函数图像。原创 2022-12-05 18:30:23 · 376 阅读 · 0 评论 -
C++,emplace_back与push_back区别
emplace_back与push_back区别原创 2022-11-29 19:57:05 · 260 阅读 · 0 评论 -
C++,没有与这些操作数匹配的“[]“运算符
编译错误,没有与这些操作数匹配的"[]"运算符,不完整类型。原创 2022-10-27 17:00:34 · 4800 阅读 · 0 评论 -
C++打印类名
输出c++指针指向的对象的类名。原创 2022-10-12 20:54:55 · 1414 阅读 · 0 评论 -
用javascript绘制点线数据
javascript绘制图形用于可视化点线数据。原创 2022-06-29 12:40:32 · 852 阅读 · 0 评论 -
Stack overflow
C++代码,运行时遇到以下错误:0x00007FF6243498F7 处有未经处理的异常(在 Project29.exe 中): 0xC00000FD: Stack overflow (参数: 0x0000000000000001, 0x0000009DE0A13000)。原因:调用的函数里,有个很大的数组,导致栈溢出了。解决:数组改为指针,new一块内存使用,最后要记得delete[] 。...原创 2022-04-23 08:25:52 · 861 阅读 · 0 评论 -
一个偶现bug排除
一个bug,程序大多数时候都好的,但每天会遇到几次crash。先是锁定发crash的调用,对调用里可能出问题的地方,加log。根据log锁定发生crash的函数,加log。找到crash直接原因,函数里使用的静态变量,在crash时有异常。在该静态变量前后加了同类型类似名称的静态变量,crash时它们也有异常。判断应该是静态变量内存被破坏了,应该是别的静态变量访问越界导致。在调试中发现,调用另一个函数后,再调用上面函数,crash必现。后面就好办了,在另一个函数里,有个buffer是个char原创 2021-10-27 19:30:24 · 355 阅读 · 0 评论 -
internal compiler error 问题
c++项目,编译报internal compiler error错误,再次编译通过。原因:make -j,没有限定线程数。解决:make -j8 test限定线程数,声明目标,避免编译非依赖目标。原创 2021-07-15 18:52:00 · 3401 阅读 · 0 评论 -
vs链接找不到库
有个项目比较大,链接时发现没有对应lib,原来是lib更名了,CMake改了,编译时没有删除CMakeCache.txt,所以找不到lib。再编译一遍时间太长了,在build目录里找到这个lib所在的*.vcxproj,手工修改lib文件名,再打开vs,就可以链接了。...原创 2021-01-26 11:52:44 · 699 阅读 · 0 评论 -
C++写的encodeURIComponent
最近在用c++,找了几个库没有找到与javascript的URI编码相对应的函数。自己写一个,只写了编码,测试可以在javascript里用decodeURIComponent正常解码。/** * uri编码字符串. * * \param in 必须是utf-8编码的! * \return uri编码后的字符串。 */std::string encodeURIComponent(std::string in){ std::stringstream ssUri; for.原创 2021-01-21 18:18:22 · 1495 阅读 · 1 评论