
C++
有关C++的所有知识点 记录分享
Pisces_224
当你想成功的时候,你就一个理由;当你想放弃的时候,你有千万个理由。
展开
-
mfc 报错:“Debug Assertion failed。 file: \xx\dlgdata.cpp,Line:70”
如题起因是我修改了mfc其中一个界面,增加了一些新的按钮,删除了一个没用的按钮。结果之后运行程序点击上层按钮,想要打开此对话框时,报此错误。一开始,不清楚原因,后来对比备份程序,突然想到可能跟自己删除按钮,确没有删除所引用的资源、变量等一系列有关。解决根据自己删除的所有控件名,找到对应的引用资源,删除所有相关的地方(头文件、类文件,resource.h引用)。之后重新生成解决方法运行即可。...原创 2022-03-11 17:24:22 · 978 阅读 · 0 评论 -
mfc “在另一个编辑器中打开”
如题解决办法是因为我们程序界面打开resource.h文件了,把它关掉就好了。原创 2022-03-11 16:57:39 · 2806 阅读 · 1 评论 -
VS2010引用全局变量报错:无法解析的外部符号
如题很久不搞C++了,最近应工作要求,在VS2010下开发mfc客户端程序。因为涉及到客户端访问服务端,必须通过账户登录来确保安全性,所以需要客户端登录拿到服务端返回的token,然后客户端后续所有url请求都要携带token去访问。这块功能用的是httpclient 和 curl库,网上资料很多,这里不做过多叙述,但也给出一个get/post请求函数的写法:Get()// 向服务器发出get请求int CHttpClient::Get(const std::string & strU原创 2022-02-17 17:32:11 · 2649 阅读 · 0 评论 -
DEBUG ERROR!CRT detected that the application wrote memory after end of heap buffer
直接上图起因就是我在使用完指针数组进行delete释放时,程序运行到这里突然爆出这个错误。网上了解了一下。原因大致如下几点:① 对动态分配的数组越界访问;②delete掉的内存没有设置NULL导致同一个内存释放多次。建议每次使用delete参考以下模板:if (rawData != NULL) { delete[] rawData; //清空 //或者 //delete rawData; //非数组 rawData = NULL; }以此来规避不必要的危险。③原创 2021-06-24 17:39:55 · 1148 阅读 · 0 评论 -
转载:C语言运算符优先级记忆口诀
C语言中有很多运算符,它们之间有优先级关系,但是原来苦于优先级关系太多,根本记不住,所以编程时只能不断的用括号来组合代码~ 今天找到了一个口诀,在这里记下来,方便以后查阅 圆方括号、箭头一句号, 自增自减非反负、针强地址长度, 乘除, 加减, 再移位, 小等大等、等等不等, 八位与, 七...转载 2021-06-21 11:15:22 · 954 阅读 · 0 评论 -
C++ I/O流
转载 I/O系统的任务就是在内存和外部设备之间稳定可靠地传输数据和解释数据。 流类库 streambuf提供对缓冲区的低级操作,ios提供流的高级I/O操作ios派生了两个类,输入流类istream和输出流类ostream 基类派生类功能streambuffilebuf提供文件转载 2021-06-21 10:28:56 · 127 阅读 · 0 评论 -
指针数组获取长度
试了好多次,一端定义初始化了指针数组,另一端要想访问指针数组,只能通过函数传参,将指针数组首地址以及指针数组的的长度传递过去。没有获取长度的函数或方法。原创 2021-06-17 14:36:15 · 2355 阅读 · 0 评论 -
解决:读取访问权限冲突:“xxx” 是0XCDCDCD、nullptr、0X1FA0112(内存地址)等等
文章目录前言1. 可能的原因2. 解决办法前言我遇到这个问题也是纠结了半天,最后发现是给一个指针数组赋值后,传递到另一端(以字节传递的)的长度是指针数组的内容长度(没有包含指针本身长度),结果导致再次遍历时,一部分正常,后一部分直接乱码加报错访问冲突。然后修改,传递的长度乘4(我是int*),再按正常遍历就可以了。1. 可能的原因这一类错误都是跟内存有关:①访问数组越界②空指针异常(指针未初始化或指向不确定的值)2. 解决办法检查你报错的地方,你的数据结构相关的代码,操作指针,一要确认定义并原创 2021-06-17 14:31:07 · 4170 阅读 · 1 评论 -
for循环中i++与++i的区别
转载:for循环中i++与++i的区别转载 2021-06-17 14:09:45 · 235 阅读 · 0 评论 -
使用cmake-gui编译源码以及使用VS2017编译生成相关库
文章目录1. 前言1.1 下载libzmq源码2. 使用cmake-gui编译libzmq2.1 安装cmake-gui2.2 编译2.3 vs2017打开工程2.4 注意事项3.vs2017直接编译zeromq-x-master1. 前言最近一段时间项目里在用ZeroMQ消息队列,正好有个同事想用下现成的库,索性在此记录下如何编译第三方库的源码以及生成对应的库文件。以编译zeromq源码为例:1.1 下载libzmq源码源码:libzmq版本:releases-v4.3.4点链接进去gith原创 2021-06-17 13:29:10 · 2383 阅读 · 2 评论 -
关于memcpy拷贝函数的基本介绍及所遇的坑
文章目录1. 前情提要2. memcpy函数函数原型函数源码功能说明3. 顺带记录一下邻居memmove函数memmove函数原理4. 坑5. 解决1. 前情提要如题,最近项目程序里使用zmq通信,原意是要将一个vector<vector<Point>>类型的数据结构从Req发送到ReP端,然后对其进行操作。但是本人试过之后发现一旦将其打包好,发送过去,另一端无法访问到内层结构及数据,(相当于传了一个黑盒过去,而自己却需要内部的数据。。。)可能需要处理把整个结构完好无损的发过去原创 2021-06-16 15:49:54 · 15510 阅读 · 0 评论 -
C++ vector的几种初始化及赋值方式
转载#include<iostream>#include <vector>int main(){ //1. 不带参数的构造函数初始化 vector<int> vec; cout << vec.size() << endl; //2. 带参数的构造函数初始化 vector<int> abc(10); //初始化了10个默认值为0的元素 vector<int> cde(10, 1); //初转载 2021-06-11 16:29:17 · 6126 阅读 · 2 评论 -
记录关于Python numpy函数np.dot()计算向量矩阵乘法以及转成C++代码的实现
文章目录简介1. Python代码2. C++实现注意!简介矩阵相乘,必须满足矩阵A的列数与矩阵B的行数相等,或者矩阵A的行数与矩阵B的列数相等我这里给出的例子是二维 X 一维的,其他种类的网上有很多,这里就不放了。1. Python代码def Rx(x,y,z,m_fXAngle): TR = np.array([[1,0,0], [0, cos(m_fXAngle), -sin(m_fXAngle)], [0, sin原创 2021-06-08 13:17:16 · 1055 阅读 · 1 评论 -
转载:结构体类型的数据作为函数参数传递
这里:用结构体类型的数据做函数参数转载 2021-06-02 20:18:00 · 312 阅读 · 0 评论 -
ZeroMQ的消息处理
转载:万字详解Zeromq消息处理转载 2021-06-02 19:47:11 · 172 阅读 · 0 评论 -
C++有关RapidJson和Jsoncpp的基本用法
一. Jsoncpp使用二. RapidJson使用原创 2021-05-14 17:52:08 · 1145 阅读 · 8 评论 -
C++中的排序方法——sort()
转载自:博客园博主文章sort函数包含在头文件为#include的c++标准库中。sort函数的三个参数:①待排序的数组的起始地址;②待排序数组的结束地址;③排序的方法,可以从大到小,也可以从小到大,还可以不写,默认为从小到大。sort(start,end,排序方法(可选))例一:sort函数没有第三个参数,实现的是从小到大#include<iostream>#include<algorithm>using namespace std;int main()转载 2021-05-10 10:08:34 · 1574 阅读 · 0 评论 -
CRT detected that the application wrote to memory after end of heap buffer
c++程序运行时报了这么每一段错误。经检查,是因为new的数组在用完删除释放内存时,new的数组空间没有加1,导致该问题。(操作的内存越界出现此问题)char* cBuffer = new char[nResult+1]; //这里加1...delete[] cBuffer; // 释放空间cBuffer = NULL;这里是一位网友的见解:有关该错误...原创 2021-04-15 09:07:12 · 278 阅读 · 0 评论 -
C++string字符串删除其中的字符
采用#include<algorithm>中的erase()函数string str = "[1, 2, 3, 4, 5]";erase(pos, n):删除从下标pos开始的n个字符str.erase(0, 1) //删除第一个字符erase(pos):删除从pos处开始的之后所有字符(pos是string类型的迭代器)str.erase(0) // 删除整个字符串erase(start, end):删除从start到end之间的所有字符(start和en原创 2021-04-07 11:34:12 · 6947 阅读 · 2 评论 -
jsoncpp中json字符串的格式化及非格式化转换
之前搞jsoncpp解析时,在将一个json数组整体赋值给一个string变量时,当时调用的是string strData = root[“LaserData”].asString();但是结果不理想,里面存的都是整型数据。根据需要,找了半天发现了一位老哥写的jsoncpp有两种处理串的方法如下:1. toStyledString()2. FastWriter中的write()具体用法如下:Json::Value root;…//root中写入数据//方法一:转为格式化字符串,里面加原创 2021-04-06 09:57:49 · 4642 阅读 · 0 评论 -
C++ string替换单个指定字符为其它字符
C++的string提供了replace方法,实现字符串的替换。但是涉及到将string串中的某个字符替换成新的字符的功能,在提供的replace方法中没有实现。在 #include<algorithm> 中也有一个replace方法,它可以实现我们想要的。#include <algorithm>int main(){ string str = "[1,2,3,4,5]"; cout << str << endl; replace(str.b原创 2021-04-06 09:38:10 · 11152 阅读 · 0 评论 -
C++ vector<int> 转 string
直接上干货#include <vector>#include <iostream>#include <sstream>#include <iterator>#include <string>using namespace std;int main(){ vector<int> vec = {1,2,3,4}; stringstream ss; string str; copy(vec.begin(), ve原创 2021-03-24 17:22:07 · 6203 阅读 · 2 评论 -
C++ vector<string>转string
采用accumulate函数#include <vector>#include <string>#include <numeric> // 函数所在的库#include <iostream>using namespace std;int main(){ string strData; vector<string> vec = { "hello world" }; strData = accumulate(vec.beg原创 2021-03-24 17:13:01 · 5083 阅读 · 0 评论 -
C++ 操作 json 文件(使用jsoncpp)
前人栽树,后人乘凉,声明部分引用自:C++ 之 C++ 操作 json 文件(C++读写json文件)及jsoncpp配置详解C++构造和解析JsonC++中JSON的使用详解一.介绍1.什么是Json?JSON是一种轻量级的数据交互格式,易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率,实际项目中经常用到,相比xml有很多优点。2. Json与其他数据存储方式比较为什么要用json文件呢?我们最常使用的存储数据的方式有很多,比如利用txt文件存,利用xml存,利用原创 2021-03-17 12:42:57 · 6511 阅读 · 0 评论 -
单例模式及为何构造函数/析构函数私有化
单例类的构造函数是私有的单例模式(单例类): 即该类只有一个实例化对象,不管外部声明调用多少次,其本质也都是访问同一块内存。比如生活中的实例:只有一个的windows任务管理器;只有一个的windows回收站。。。单例模式的核心是构造方法的私有化(即在入口处限制了对象的实例化),之后在类的内部实例化对象,并通过静态方法返回实例化对象的引用。几种单例模式实现待定…了解其本质就好。以C++11为例C++11提供的call_once和once_flag解决了单例类线程安全问题。CData原创 2021-03-16 15:01:35 · 8102 阅读 · 5 评论 -
c++访问类中私有成员变量的几种方法
今天突然遇到这个需求了,就拿出来记录一下。常用的3种方法set/get接口友元类/友元函数通过指针访问内存地址1.友元方法#include<iostream>using namespace std;class A {public: A(){} ~A(){} friend class B; //声明友元类private: int num = 10;}class B {public: A a; int Sum(){ return a.num + 10转载 2021-03-12 21:08:03 · 10127 阅读 · 2 评论 -
C++ void*与string互转
`#include <utility> // std::pair#include <iostream> // std::cout#include <string>int main () { // Cast a dynamically allocated string to 'void*'. void *vp = static_cast<void*>(new std::string("it's easy to break stuff原创 2021-03-12 16:01:12 · 9927 阅读 · 5 评论 -
VS执行单元测试调试c++代码(zmq通信)时,遇到线程莫名中断退出
起因是单元测试想测一下zmq通信发布订阅模式能否正常启动,结果单步调试到某一行时,线程突然中断程序退出。解决办法在TEST_F(A, testzmq)方法中,调用zmq线程执行方法的代码后再添加一段代码:CZmqPub pub;pub.RunPub(); //zmq启动线程//阻塞当前线程,以便顺利执行while (true){ std::this_thread::sleep_for(std::chrono::milliseconds(1000));}原因一开始以为是类的生命周期原创 2021-03-11 17:42:44 · 796 阅读 · 0 评论 -
C++接口类的定义和实现
时间不等人,直接上他人介绍博客:正确定义接口类另外大佬博客末尾有第二篇文章:接口类的实现。over.转载 2021-03-11 11:16:46 · 676 阅读 · 0 评论 -
vs2017引用最新的zmq通讯库仍然报错:无法解析的外部符号
报错如下:解决排除了所有头文件,lib库,字符集,预处理器等问题,原因出在这里:在引用zmq静态库lib时,首先要预处理器添加宏:ZMQ_STATIC连接器->输入->附加依赖项里还要添加以下三个库:wsock32.libws2_32.libIphlpapi.lib为保险起见,(我就是链接器配置好了仍然不管用),在zmq发布订阅端类的定义文件.cpp里再加入以下一段代码:#pragma comment(lib, "libzmq.lib") //”“里是你lib文件原创 2021-03-10 16:57:23 · 1148 阅读 · 2 评论 -
c++使用tinyxml读取xml配置文件调试其中的string字符串提示”字符串中的字符无效“或输出乱码
第一遍提示字符串中字符无效,之后再次调试,显示乱码;注意:这里是读取string字符串(ip地址)出现的乱码,中文乱码什么的请绕行。好了,说解决办法:网上查阅有一位博主说当你的结构体中有string字符串成员时,对结构体初始化的函数memset()不再适用,进而导致编辑器识别乱码。(巧了,我正是使用该函数初始化的。)解决:在读取到值赋值给外面变量时,使用数据类型转换函数给它重新转换成string一下就可以解决了。...原创 2021-03-09 14:23:54 · 1737 阅读 · 0 评论 -
c++ string的输出异常
转载:这里转载 2021-03-05 15:53:11 · 499 阅读 · 0 评论 -
c++输出字符串结尾部分中文乱码问题
如题今天在调试别人写的部分代码时,这里输出产生了部分中文乱码。好奇之下查了一下,原来是因为字符串结尾缺乏’\0’结束符,指针找不到,所以产生乱码。一开始总想给字符串加个结尾符,搞了半天没搞成,后来查了下这个memcpy函数:函数原型void memcpy(voiddest, const void *src, size_t n);功能由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。头文件#include<string.h>返回原创 2021-03-05 15:27:04 · 3803 阅读 · 0 评论 -
谈谈VS2017使用源代码管理(gitlab)
多人协同开发时1. 新建项目/解决方案1.直接右下角选中新建git存储库;2.打开解决方案,右键生成一下;然后观察窗体底部栏,原创 2021-02-25 16:05:30 · 3167 阅读 · 0 评论 -
ZMQ通信模型及基本服务实现
Zmq是一个简单好用的传输组件,使得socket变成更加简洁、高效、高性能。一.zmq,云计算时代最好的通讯库援引自看过的一篇介绍:为什么说ZeroMQ是云计算时代最好的通讯库呢?我们从ZeroMQ的特性来分析吧:1.The socket library that acts as a concurrency framework.开起来像是并行开发框架的socket库。为什么一个通讯的库不提供socket的风格,反而看起来像是一个并行的库?云计算不就是分布式计算嘛!并行、多核、分布式,让计原创 2021-02-23 13:35:43 · 3499 阅读 · 0 评论 -
c++结构体初始化
转载:结构体初始化小技巧转载 2021-02-09 17:28:00 · 1299 阅读 · 0 评论 -
遇到的C++代码警告及错误
一. 警告warning C4018: “<”: 有符号/无符号不匹配原因: 在for循环中默认vecScanData.size()时unsigned int类型,而 i常常写成int类型,改成size_t(计算数组大小或索引)就行。warning C4005: "XXX"宏重定义解决: 宏定义要在 #include<windows.h> 之前。warning C4244:"=": 从"double"转到"int"可能丢失数据。编译器例行警告。如果对精原创 2021-02-09 17:23:21 · 6540 阅读 · 1 评论 -
VS2017编译错误:C2953: “XXX“类模板已经定义
解决:字面意思,检查是否重复定义了。(找所有定义,引用)另外,都知道类模板定义声明最好都在头文件,分开有很多麻烦,不要没事找事,除非特殊需求。附上官方编译错误大全啦啦啦...原创 2021-02-04 11:12:53 · 1572 阅读 · 0 评论 -
call_once函数搭配once_flag用法
在多线程的环境下,有些时候我们不需要某给函数被调用多次或者某些变量被初始化多次,它们仅仅只需要被调用一次或者初始化一次即可。很多时候我们为了初始化某些数据会写出如下代码,这些代码在单线程中是没有任何问题的,但是在多线程中就会出现不可预知的问题。 bool initialized = false;&n...原创 2021-02-02 16:10:04 · 531 阅读 · 0 评论 -
git开发提交远程代码错误——rejected master -> master (pre-receive hook declined)
如下图:原因是因为:默认情况下git远程新建项目master分支权限为protected,即不开放。所以developer开发者没有访问权限。解决办法有二:1.在项目的【Setting】中的【Protected branches】可以设置哪些分支是被保护的,默认情况下【master】分支是处于被保护状态下的,develop角色的人是无法提交到master分支的,在下面的【Developers can push】打上钩赋予权限就行;2.新建其他的分支,推送上去后请求merge request来原创 2021-01-29 09:59:59 · 9669 阅读 · 0 评论