![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
alex_mist
coding....
展开
-
C++ 错误:“xxx” does not name a type
遇到错误:这其实是由于头文件的递归引用造成的,也就是在A类头文件中include了B,在B类头文件也include了A造成的!原创 2021-03-16 17:03:36 · 2885 阅读 · 0 评论 -
C/C++中函数声明的作用
C/C++中函数声明和include头文件的作用参考:https://blog.csdn.net/qq_28648279/article/details/78463345一直想不明白,函数声明的作用。在include中我们只是把函数的声明放入代码了,调用函数的具体实现还是要看函数的定义,那么include函数声明到底有什么作用呢?按理说我只要能正确链接对应的函数定义就可以了呀?在参考的博客中看到这么一段话:”其实函数声明的作用是让编译器帮你检查你调用函数时有没有错误。比如参数的数量是否正确,如果调用函原创 2021-02-27 12:20:07 · 3469 阅读 · 0 评论 -
Linux 在动态链接库中使用static静态函数会导致的问题
我们知道static静态函数相比于全局函数,会把范围限定在自己所在文件的范围,对其他的编译单元是不可见的!那么若在动态库中定义了static静态函数并完成库的编译,那么在主程序加载并试图调用这个static静态函数的时候会找不到它!因此需要在主程序中直接调用的函数在动态库中不要定义和声明为static类型!同样的问题也在stackoverflow有讨论:https://stackoverflow.com/questions/5526461/gcc-warning-function-used-but-n原创 2020-12-17 11:41:59 · 1153 阅读 · 2 评论 -
Linux 编译成功动态链接库但是运行时:error while loading shared libraries: liberr_handle.so: cannot open shared obje
今天遇到了一个问题,我写的动态链接库在编译链接的时候都没有问题:gcc test.c -o test -L ../lib/ -lerr_handle -g但是在运行时却报错:./test: error while loading shared libraries: liberr_handle.so: cannot open shared object file: No such file or directory明明我已经通过gcc的-L和-l参数指定了要去哪找动态链接库了,但是为什么在运行的时原创 2020-12-17 11:15:15 · 570 阅读 · 0 评论 -
错误解决方法:error: reference to non-static member function must be called
在刷leetcode时遇到错误:这是因为我在类成员函数中调用三个参数的sort(),并且也将cmp函数定义为类成员函数,需要将cmp函数在类中定义为static!代码如下:class Solution {public: static bool cmp(vector<int>& a,vector<int>& b){ //bool cmp(vector<int>& a,vector<int>& b) 错误原创 2020-12-16 14:08:02 · 28591 阅读 · 12 评论 -
leetcode-290. 单词规律之哈希双射
这题用到了一一对应映射关系的双射问题,也就是要验证a–>dog和dog–>a的关系都是唯一的!代码:class Solution {public: bool wordPattern(string& pattern, string& s) { istringstream is(s); string tmp; vector<string> strs; while(is>>tmp)原创 2020-12-16 13:07:07 · 138 阅读 · 0 评论 -
C++隐式类型转换与explicit
转自:https://www.cnblogs.com/QG-whz/p/4472566.html《C++ Primer》中提到:“可以用 单个形参来调用 的构造函数定义了从 形参类型 到 该类类型 的一个隐式转换。”这里应该注意的是, “可以用单个形参进行调用” 并不是指构造函数只能有一个形参,而是它可以有多个形参,但那些形参都是有默认实参的。那么,什么是“隐式转换”呢? 上面这句话也说了,是从 构造函数形参类型 到 该类类型 的一个编译器的自动转换。下面通过代码来看一看:#include "s转载 2020-12-13 20:23:39 · 102 阅读 · 0 评论 -
C++ STL之unordered_set
unordered_set和unorder_map很类似,内部都是无序的!unordered_set是一种无序集合,其底层实现基于hashtable,因此具有快速的查找和删除,添加的优点,因此在需要多次查找和删除的场景里可以用unordered_set来存储数据!定义unordered_setunordered_set<int> u_set;基本操作//判断是否为空u_set.empty();//获取元素个数 size()u_set.size();//获取最大存储量 max_转载 2020-10-22 10:54:03 · 4331 阅读 · 0 评论 -
C++引用与指针问题以及效率
问题今天刷leetcode的时候做到一道构造二叉树类型的题,发现算法写的没问题但是执行的返回总是为空,函数没有改变我传入的指针参数。原因是我传入的指针,并不是通过这个指针去修改其指向的内容,而是修改了这个指针的指向!然而我的参数传入方式是传值,因此传入的其实是指针的副本,而后函数中改变了这个副本的指向,但是最后退出函数的时候,调用函数中的指针其实是没有改变的。因此只能对指针也进行引用传递:TreeNode *&root引用引用是在C++中引入的,原始的C是只能通过传地址来实现的; 我们通常原创 2020-08-18 16:43:03 · 1361 阅读 · 0 评论 -
[转载]彻底弄懂C语言数组名
转自:https://blog.csdn.net/Kwansy/article/details/78488222先定义一个一维数组int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };一、数组名是什么数组名的值是数组首元素的指针常量。数组名不是指针,但大多数使用到数组名的地方,编译器都会把数组名隐式转换成一个指向数组首元素的指针来处理。只有两种情况下例外:第一种是对数组名使用sizeof运算符sizeof(a)这将会得到整个数组所占的内存大小,a是长度为1转载 2020-08-15 15:28:13 · 146 阅读 · 0 评论 -
错误:address of stack memory associated with local variable ‘res‘ returned
今天在敲代码的时候,在一个函数中定义了局部数组变量,并在return的时候返回了这个局部数组变量的地址,于是乎出现warning:这是个蛮愚蠢的错误,我把局部变量的地址作为返回,但是局部数组变量是位于stack区的,函数结束后这个地址中的数据将失去意义;我们平时经常会在函数中定义变量并返回这个变量,但注意,返回的是这个变量的值!那么这个值是存放在哪里的呢?C语言的机制是将return的值存放在eax寄存器中,系统再将eax存放的值再传给接收者;...原创 2020-07-30 18:53:30 · 7716 阅读 · 0 评论 -
C/C++ 输入函数总结
C:在C中没有string类,用char字符串数组来表示字符串,以‘\0’来表示字符串的结束;因为是用数组来表示字符串,对于数组限长检查很重要;scanf(),对空格敏感,只能输入单词而不能输入带空格的字符串,而且没有对数组限长的检查,非常不建议; 代替品是scanf_s(); 而数组要考虑到为结尾的’\0’预留位置;gets(),对空格不敏感,检测到回车结束输入,但是回车会残留到输入缓冲中;而且没有对数组限长的检查,不建议;代替品是gets_s(),fgets(),含有限长检查C++:C+原创 2020-07-30 17:06:10 · 138 阅读 · 0 评论 -
[转]关于setvbuf()函数的详解
转自:https://www.cnblogs.com/lichenlong/p/5170059.html为什么要使用setvbuf函数如果你的内存足够大,可以把文件IO的BUF设置大一些,这样每次你用fopen/fread/fwrite/fscanf/fprintf语句的时候,都会在内存里操作,减少内存到磁盘IO读写的操作次数,提高系统效率。如果你的程序的功能涉及到类似数据库、视频、音频、图像处理等大量需要爆发式磁盘到内存的IO情况下,可以考虑用setvbuf进行优化内存IO,其他情况下可以不考虑,L转载 2020-07-21 14:48:41 · 658 阅读 · 0 评论 -
关于linux gcc的动态链接和函数同名情况
Gcc的几个参数-I(大写i,include):指定include头文件的位置-l (小写l,link):指定link库文件的名字,如库文件libhello.so,那么加入参数-lhello-L:指定找库文件的位置例子:gcc test7.c -o test7 -I /usr/src/linux-source-4.15.0/linux-source-4.15.0/tools/include去/usr/src/linux-source-4.15.0/linux-source-4.15.0/to原创 2020-05-29 22:24:12 · 626 阅读 · 0 评论 -
C++ static用法的小结
我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义为全局的变量,但定义一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅只受此函数控制)。static 关键字则可以很好的解决...转载 2020-04-22 13:44:37 · 105 阅读 · 0 评论 -
C++ const常函数和const指针的用法
对于类中的函数,若是定义了const,就成为了常函数;常函数可以使用数据成员,但是不能修改数据成员,对函数的功能有更明确的限定;如:class A{private: int a = 0;public: int change() const //change()就成为了常函数 { this->a = 1; //常函数不能...原创 2020-04-22 12:23:12 · 523 阅读 · 0 评论 -
Unix C/C++编程-open(),read(),write(),sprintf(),lseek()
open()函数open函数返回的是int类型,成功返回的是int类型的文件描述符,失败返回-1文件路径是个char*指针打开方式比较常用的是O_RDONLY,O_WRONLY,O_TRUNCread()函数位于<unistd.h>中,原型:ssize_t read(int fd,void*buf,size_t count)fd为int类型的文件描述符,一般都是用一...原创 2020-04-09 19:57:20 · 494 阅读 · 0 评论 -
C++ STL-stack和queue的用法
STL-队列#include<queue>queue<T> q;//使用模板泛型q.push(element);//向队列的队尾插入元素q.pop();//从队头出队一个元素q.back();//返回队列队尾的元素q.front();//返回队列队头的元素q.empty();//判断队列是否为空,返回bool类型q.size();//返回队列长度STL-...原创 2020-04-08 12:22:28 · 88 阅读 · 0 评论 -
C++ STL find()函数
STL的find函数的输入查找范围参数都是指针或是迭代器,返回的也是指针或是迭代器:需要注意的是,find(start,end,xxx),end是不在查找范围的,因此常常使用返回是否等于end来判断是否查找成功1.数组的查找:int res[5] = { 0,1,2,3,4 }; int *pos = find(res, res + 5, 5); //这里的查找范围是指针 //res+...原创 2020-03-27 22:54:59 · 3227 阅读 · 1 评论 -
C++ STL之map介绍
感觉c++的map和python的字典差不多,它提供一对一的hash关系;也是关键字key和value之间的映射;map內部的实现自建一颗红黑树,这颗树具有对数据自动排序的功能使用map得包含map类所在的头文件:#include<map>1.map的初始化方法map<int, string> hhh; hhh = { { 3,"eric" }, { 4,"m...原创 2020-03-27 22:29:57 · 149 阅读 · 0 评论