![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 87
JoliceYU
技术小白 一步一个脚印 不断努力不断学习
展开
-
C++中指针初始化和使用注意事项
在C++中指针经常会出错,有时候定义了指针没有初始化直接使用,或者是定义指针的时候,将指针置成NULL,但是后面直接对指针进行操作,这样程序也会出错。对于任何指针定义之后,都要对齐进行初始化。初始化有几种: 1)定义之后置为NULL,这样可以防止指针错误地指到我们不知道的内存,如果后面程序中对这个指针指针进行操作,系统会报出错误。一般定义指针后如果不对其进行初始化,其指向是不确定的。 in原创 2016-09-01 15:12:21 · 17836 阅读 · 1 评论 -
冒泡排序法
排序经常用到,冒泡排序的思想,就是和水泡一样,浮向水面,一个一个地将最大或者是最小的那个数移止最前或者是最后的位置。不好表达,下面以程序为例子分析。#include using namespace std;int a[8] = { 100, 25, 58, 26, 6, 85, 75, 49 };void main(){ int n = 8; int data = 0; //注意原创 2016-08-27 11:15:26 · 886 阅读 · 0 评论 -
含有指针成员的结构体使用总结
在C++中经常用到结构体和指针,当定义一个结构体,结构体成员中有指针的时候,需要注意很多。一下分为:结构体初始化、结构体作为函数参数、函数返回值、以及结构体指针的情况进行总结。一、含有指针成员的结构体初始化含有指针成员的结构体初始化的时候,必须给指针成员给一个明确的地址。注意:给指针成员初始化的时候,要么给其一个地址,比如是数组数组地址的时候,就可以通过指针来操作数组,也可以一个变量的地址原创 2016-08-31 19:54:13 · 37892 阅读 · 4 评论 -
VS打开之前创建的MFC工程显示代码错误的解决办法
最近遇到一个问题,大概一个月之前用VS2012创建的MFC工程,现在还是用2012打开,但是代码中显示很多“无法识别的标识符”,截图如下:就是代码中会显示很多与MFC 有关的标识或者类名为“无法识别的标识符”,但是重新生成或者编译整个工程又没有任何错误,不过有时候也会有错误。最后的解决办法是:办法1:在工程的属性设置中,在“包含目录”中,将当前工程的目录的路径添加进去就可以了。办法原创 2017-05-25 10:36:32 · 851 阅读 · 0 评论 -
重装VS后无法打开iostream文件解决办法
这几天重装了VS2012编译器,重装后发现了一个问题,之前用VS2012创建的可以运行的工程,现在打开运行都显示iostream库打不开,以及一些基本的c++的基础库都没法打开,后来发现是因为自己重装了VS的时候,重装的VS的路径和重装前的不一样所致。解决办法 办法1:再次重装VS,注意这次重装的路径要和之前的第一次的路径相同。 办法2:将之前的创建的工程的源文件都拷贝,在重装后的VS下创建工程原创 2017-05-08 11:32:25 · 13596 阅读 · 5 评论 -
error LNK2019: 无法解析的外部符号
最近在VS中一直好几次遇到了这个错误,现在将解决办法总结下:1、比如在配置相关的库的时候,相关的lib或者头文件没有包含对,函数找不到定义。比如在配置opencv的时候,检查下相关的库和lib文件的配置。2、函数在头文件中,但是没有被实现,比如自己定义了一个函数,在h文件中被声明了,但是在具体的实现文件中没有被实现,或者实现文件和声明的不一致。这时需要检查相关的函数的实现。原创 2017-07-13 09:56:00 · 457 阅读 · 0 评论 -
MFC中获取文件路径和文件夹路径
最近做一个MFC的小界面,需要实现这样两个功能:1、在界面上加一个按钮,单击按钮弹出一个对话框选择文件,在工程中获得文件的路径;2、在界面上加一个按钮,单击按钮弹出一个对话框选择文件夹,在工程中获取文件夹的路径。一、获取文件的路径// -- 按钮的消息响应函数void CDialogSampled::OnBnClickedButtonOpen(){ // TODO: 在此添加控件通知处理原创 2017-09-20 15:28:26 · 15328 阅读 · 0 评论 -
VS error LNK2001:无法解析的外部符号 xxx
在VS中编译C++程序的时候经常遇到这个错误:LNK2001,即链接的错误,有时候遇到这种错误都无法下手。出现这个error的常见的原因。1、原因1在头文件中声明了相关的函数,但是在cpp具体的实现文件中没有对函数进行实际的定义所致。下面举个例子:#include<iostream>using namespace std;//该函数没实际的定义void output();int main()原创 2017-12-08 13:17:51 · 5650 阅读 · 0 评论 -
动态、静态编译以及MD、MDd、MT、MTd编译
一、问题的引出最近在VS2012中新建了一个MFC的工程,在自己电脑上运行很好,但是当拷贝到同学电脑上的时候一直出现“差dll”或者是“应用程序无法启动”的错误。后来找出原因,是自己编译的时候选择静态还是动态编译的问题。 解决办法1:让同学安装了VS2012,注意这里必须是和自己编译器相同的版本,比如是2013就不行。 解决办法2:在自己这边用静态编译,重新生成可执行文件即可。二、动态和静态编译原创 2017-05-08 15:13:35 · 3472 阅读 · 0 评论 -
封装opencv的函数成dll,独立调用
在opencv的实际使用,经常遇到这种情况,自己在电脑上配置了opencv,写好了opencv的代码工程,在环境变量中加了opencv的dll的路径,这样可以在自己电脑上运行代码。但是如果将该工程拷贝到其他没有配置opencv的电脑上就无法运行。解决办法:在配置了opencv的电脑上(但是在环境变量中没有添加dll的路径),将调用相关函数的代码封装成函数,生成dll文件,拷贝到其他没配置opencv原创 2017-12-03 20:37:58 · 17317 阅读 · 6 评论 -
:34:5: error: control may reach end of non-void function [-Werror,-Wreturn-type] 错误分析
在做牛客网的题目的时候经常遇到这种问题,代码在VS上跑的时候一点问题没有,但是放到牛客网上就出这个问题./solution.h:34:5: error: control may reach end of non-void function [-Werror,-Wreturn-type]了,而且经常找不到错误,今天遇到一个错误记录下,以免忘记。错误分析分析:一般这个错误的第一个数字就是指的是...原创 2018-02-25 10:09:39 · 9771 阅读 · 1 评论 -
关于memset函数的需要注意的问题
最近用到了memset函数,但是忽略了一点:memset函数的写入是按字节写入的。以下为自己犯错的地方:int *a = new int [100];memset(a, 10, sizeof(int)*100);for(int i=0;i<100;i++) cout 输出的结果如下:原因:memset的内存写入是按照字节来进行的,是按照字节为单位进行写入的。该例子中,原创 2017-02-14 18:58:57 · 2994 阅读 · 0 评论 -
C++类对象之间赋值产生内存泄漏的一种情况
在用C++ 中定义的类,如果类成员中涉及到了指针以及开辟内存的问题,这样的类对象之间的赋值很容易造成内存的泄漏,见下面的一种情况。代码如下:类的定义和相关的构造函数如下:class image{public: int width; int height; int* pImg; image(int w, int h, int value);};image::image(int原创 2017-02-14 15:01:49 · 1746 阅读 · 0 评论 -
sizeof用法总结
sizeof函数返回的相应对象所占的字节数,注意是字节数,一个字节是8位二进制数。一个字是2个字节,对应16位二进制。sizeof的对象主要分为以下几种: 1、基本数据类型及其相应的指针 ;2、结构体、联合体;3、数组一、基本数据类型和指针 int a = 10; int b = sizeof(a); //值为4 b = sizeof(int); //值为4 do原创 2016-08-29 15:49:15 · 1030 阅读 · 0 评论 -
“引用作为函数参数”与 “引用作为函数返回值”
“引用作为函数参数”与 “引用作为函数返回值”一、引用作为函数参数作为函数参数时引用有两种原因:1、在函数内部会对此参数进行修改2、提高函数调用和运行效率 关于第一点,都知道C++里提到函数就会提到形参和实参。如果函数的参数实质就是形参,不过这个形参的作用域只是在函数体内部,也就是说实参和形参是两个不同的东西,要想形参代替实参,肯定有一个值的传递。函转载 2016-09-06 09:07:28 · 5716 阅读 · 1 评论 -
C++中基本的数据类型和所占的内存大小
一、整形1、整形有char、short、int、long、long long,这5个也默认为signed XX ,相应的无符号的类型,即unsigned类型。规则:short至少16位;int至少和short一样;long至少32位,且至少和int一样长;long long至少64位,且至少和long一样长。不同的数据类型的所占的字节数不一样,这与系统和C++库有关系。可以看到转载 2016-11-21 15:24:46 · 2702 阅读 · 0 评论 -
char数据cout输出的一些问题。
1、在C++中常用的是利用cout进行数据输出,但是需要注意的是:在使用cout将数据打印出来的时候,char和unsigned char数据打印出来的是其相应的ASCII码,不是相关的数值。unsigned char a=80; char b = 80;cout //打印字母Pcout //打印字母P2、ASCII码表常用的相关部分1)ASCII码打印字符:十进制 32原创 2016-11-21 16:19:53 · 20219 阅读 · 0 评论 -
C++中指针的强制转换。
一、指针地址的本质和存储 在C++中所有的指针地址的大小都是固定的,也就都是4个字节的大小,地址的本质就是一串0和1的机器代码。任何一个变量都必须占有一个地址,而这个地址空间内的0-1代码就是这个变量的值。不同的数据类型占有的空间大小不一,但是他们都必须有个地址,而这个地址就是硬件访问的依据,而名字只是提供给程序员的一种记住这个地址的方便一点的方法。但是,不同的变量在机器中都是0-1代转载 2016-11-21 17:27:58 · 39432 阅读 · 4 评论 -
C++中局部和全局变量的地址分配
知识储备:1. 内存的分区:代码区,数据区,堆,栈。 四个区域司职不同,相互配合。 2. 变量的分类以及初始化情况:局部变量,全局变量,静态的,非静态的。C++里面又包括成员变量。一. 局部变量编译器按照内存地址递减的方式来给变量分配内存局部变量很多书籍中也叫自动变量,它声明在函数块内,作用范围也在函数块内。 不能被同一源文件的其他转载 2016-11-22 11:12:42 · 6257 阅读 · 3 评论 -
VS2012中自动变量的地址分配问题
在上篇转载的博客中写到,自动变量是存储在栈中,且分配地址的顺序是根据声明的顺利递减分配地址。下面是自己的测试实例:使用的是int变量。#include using namespace std;int main(){ int n1 ; int n2 ; int n3 ; cout <<&n1<<endl; cout <<&n2<<endl; cout <<&n3<<endl;原创 2016-11-22 11:25:31 · 698 阅读 · 0 评论 -
C++中使用new遇到的一个小问题
看下面的一段代码:int main(){ int* p_int = new int [100]; for(int i=0;i<100;i++) p_int[i] = i; int* p = p_int; for(int i=0;i<100;i++) cout << p[i] << endl; delete[] p; p = NULL; for(int i=0;i<100原创 2016-11-22 16:25:31 · 459 阅读 · 0 评论 -
相对路径的一些理解
在写代码中经常遇到路径的问题。比如在用到某一个库的时候,需要在工程中添加相关库的路径和库的路径,这个时候可以用相对路径也可以用绝对路径;在VS中调试与直接运行exe的时候也会存在这个问题,因为路径的问题有时候也会导致错误。下面就上面所说的两种情况分别举例说明。(以使用GDAL图像库读取一张图片为例进行分析)原创 2016-11-22 17:58:51 · 2398 阅读 · 0 评论 -
.dll动态链接库文件、h头文件、 .lib库文件之间的关系与联系
一、几种文件的作用h头文件作用:声明函数接口dll动态链接库作用:含有函数的可执行代码lib库有两种:(1)静态链接库(Static Libary,以下简称“静态库”)(2)动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)两者的区别:实质是不一样的东西。静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其转载 2017-02-19 15:51:19 · 10116 阅读 · 1 评论 -
C++中全局变量的使用和注意事项
在C++ 中,在函数体内或者是代码段内定义或者声明的变量其作用域是相应的函数或者是代码段,是局部变量,执行结束内存自动释放。相对于局部变量,全局变量的定义和声明在函数体外,作用域从定义处到相应的文件结束。关于全局变量的使用分以下: 1.在文件中定义了全局变量,需要在前面使用:这时在定义之前用extern关键字对其进行声明。eg://cpp文件extern int a;void原创 2017-02-28 15:16:11 · 13599 阅读 · 1 评论 -
生成dll文件与显式调用dll文件
在C++中有dll、lib和h头文件,这些文件各自有各自的作用。对于调试代码到生成一个可执行文件的过程中,lib和h文件在编译的时候用到,dll在可执行文件执行的时候用到。下面就写一下dll的生成方式和显式调用的例子和流程。一、生成dll文件。看以下代码:#include using namespace std;//生成dll文件声明extern "C" int __decls原创 2017-02-19 16:43:59 · 897 阅读 · 0 评论 -
error C2440: “=”: 无法从“CString”转换为“LPCWSTR” 解决办法
今天在VS2012建立的MFC工程中做视频解码,一直遇到这个错误,这个问题的解决办法有以下三个:方法1、将工程属性->配置属性->常规->字符集中设置设置成“使用多字符字符集”。方法2、将出错的地方的CString型变量前加一个W2A。eg:W2A(StringName)方法3、将出错的地方的CString型变量前加一个_T。eg:_T(StringName)原创 2017-02-20 15:09:37 · 6520 阅读 · 0 评论 -
C++中delete和delete[]的区别和深入分析
在C++中经常遇到内存的开辟和释放问题,最近在做项目的时候遇到了一个关于new和delete内存释放的问题,所以总结下这个问题。在C++ primer中,delete一般用来释放单个对象的内存,delete[]用来释放多个对象的内存。但是实际的情况比较复杂,特别是涉及到自己定义的类以及类中还有指针内存开辟的问题的时候。以下分三种情况来讨论。一、基本数据类型指针的内存的开辟和释放。针对基本数原创 2017-03-01 10:35:37 · 898 阅读 · 0 评论 -
含有指针成员的对象的内存的开辟和释放需要注意的问题
最近在遇到一个问题,在一个类定义中,有三个的类成员是CxImage的图像指针,存储图像数据,因为每次读取图像的时候都需要开辟一个CxImage对象的内存,我在类的构造函数中为每个CxImage指针new了一个CxImage的内存,在构造函数中进行了释放。但是这样遇到一个问题,有时候,当这个类中的图像指针指向其他的图像时,或者是在调用图像读取函数(函数中开辟了内存返回了一个CxImage对象指针),原创 2017-03-01 19:01:47 · 2625 阅读 · 0 评论 -
C++ STL 注意点
C++ STL 注意点1、存储内存所有的STL的容器的元素都是存储在堆中,所有的内存的开辟和释放都是容器自己解决的。整体内存分为:堆区域栈区域全局存储区:这其中BSS的没有初始化; DATA是初始化后的变量。文字常量区程序代码区2、常用的STL 容器总结(1)序列容器:一般常用的。vector:动态顺序容器。注意每次push元素,如果个数超过当前的capxxx容量值...原创 2018-11-01 20:06:40 · 1105 阅读 · 0 评论