C++
文章平均质量分 54
willinux
github地址:https://github.com/stephenix
展开
-
vector保存局部变量和指向局部变量的指针区别
一、结论vector保存局部变量:可以,因为在vector上创建对象也是在堆上;vector保存指向局部变量的指针:不可以,因为局部变量离开作用域后,就会释放,指向局部变量的指针会指向未知的地址空间,指向的内容未知。demo1:验证vector即使局部变量也是堆上上分配。结果:返回的vector中保存的局部变量地址没有变化。#include <iostream>#include <vector>using namespace std;// 返回一个vector变量,原创 2021-01-18 17:59:59 · 1441 阅读 · 0 评论 -
C++ 类静态成员变量存取出错 undefined reference to ‘xxx‘
刚开始用C++写程序,遇到了一个很奇怪的问题,就是在类定义的面定义了一个静态成员变量,但在使用时编译器报错称变量不是类的成员。文件a.h内容:#define A_H class A { static int num1; int num2; A(); } #endif 文件a.c内容:#include "a.h" void A::A() { num2=1;//正确 num1=2;//报错 } 编译转载 2020-08-14 16:39:03 · 1177 阅读 · 0 评论 -
undefined reference to `vtable for FssHelper‘
1.编译报错:In function `~FssHelper':FssHelper.h:51: undefined reference to `vtable for FssHelper'2.查资料:(1)可能1:基类的析构函数需要有函数体。~IFssHelper() {}或者 ~IFssHelper() = default;(2)实际我已经添加了函数体,最后发现是代码里没有用到多态,没有生成vtable。生成vtable的时机是编译器发现有基类的指针指向派生类,才会去真正创建vtable原创 2020-07-29 14:51:50 · 150 阅读 · 0 评论 -
blade说明和使用
1.blade是什么?有什么优点?(1)blade是什么一个构建工具,根据BUILD文件构建目标,类似于make根据Makefile文件构建目标。(2)blade优点:先看makefile的缺点:间接依赖也需要在makefile里写明构建速度慢blade优点:依赖自动传递,只需要写出直接依赖,间接的依赖blade为你搞定构建速度更快增量构建2.blade怎么用Blade 通过一系列的名字为 “BUILD” 的文件(文件名全大写),这些文件需要开发者去编写。每个 BUILD文件原创 2020-07-21 18:19:29 · 8092 阅读 · 0 评论 -
C++编译常见错误
1.error: ‘common’ has not been declared没有include头文件或者没有using namespace2.undefined reference to void function,collect2: error: ld returned 1 exit status找的到头文件(找得到定义),链接ld找不到目标文件,因为找不到函数定义,函数实现没有找到前两个问题主要说明,.h和.cpp为什么会分开,.h是函数声明,方便其他人调用,.cpp是函数定义(函数实现),链原创 2020-07-15 19:41:13 · 1038 阅读 · 0 评论 -
error: ‘virtual void xxx const‘ was hidden [-Werror=overloaded-virtual]
从错误信息提示看,是虚函数被隐藏,所以报错。1.为什么会出现这种错误?(1)先理解重载和重写(覆盖)的区别:重载:函数名相同,函数参数不同,和返回类型无关;重写(覆盖):函数名相同,函数参数相同,多用在实现函数的多态;(2)这种报错,多是基类定义的虚函数被子类隐藏,子类定义了同名函数,但方法参数不同造成2.-Werror=overloaded-virtual这是编译选项,-Werror=overloaded-virtual:是报出error,W本身是warning,error是把warnin原创 2020-07-14 21:05:29 · 2278 阅读 · 0 评论 -
145. Binary Tree Postorder Traversal
Description:Given a binary tree, return the postorder traversal of its nodes’ values.Analysis:递归解法容易,如果是非递归呢?很好解法:二叉树非递归解法决定这个解法的原因是二叉树的结构和依次访问二叉树的顺序,根-左-左-根-右-右-根。Solution1:两个辅助栈,输出栈是后序遍历的逆序,辅...原创 2020-05-08 11:26:10 · 122 阅读 · 0 评论 -
cc1: error: unrecognized command line option "-std=gnu++11"
编译报错:cc1: error: unrecognized command line option “-std=gnu++11”1.什么是cc1:http://www.kbase101.com/question/22976.htmlhttps://en.wikibooks.org/wiki/GNU_C_Compiler_Internals/GNU_C_Compiler_Architectur...原创 2019-06-18 17:17:16 · 9558 阅读 · 0 评论 -
572.Subtree of Another Tree
Description:Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all...原创 2019-04-15 23:50:22 · 239 阅读 · 0 评论 -
c++ string assign和operator=
已经有operator=,为什么要有assign?1.两者性能差不多, equally fast[1]https://stackoverflow.com/questions/34196053/stdstringassign-vs-stdstringoperator2.assign用法多, operator=意思清晰[2]https://www.learncpp.com/cpp-tutori...原创 2019-01-14 21:00:41 · 1877 阅读 · 0 评论 -
c++ 重载、覆盖、隐藏
重载: 1. 层次:同一个类中 2. 函数名称相同 3. 参数列表不同覆盖: 1. 层次不同:派生类覆盖基类 2. 函数名称相同 3. 参数列表相同 4. 基类函数必须有virtual关键字隐藏:派生类的函数屏蔽了与其同名的基类函数 1. 层次不同:派生类隐藏基类 2. 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键...原创 2018-04-17 22:22:52 · 167 阅读 · 0 评论 -
c/c++ static用法
c/c++中static用法c中static用法回想一下,c中static用法: 1.局部变量和static局部变量 作用域:相同,都是所定义的函数; 生存周期:不同,分别是所定义的函数执行结束,程序运行结束; 存储空间:不同,分别是栈和静态存储区; 2.全局变量和static全局变量 作用域:不同,分别是所有文件的函数使用和所定义的源文件中函数调用; 定义static全...原创 2018-04-17 20:53:34 · 283 阅读 · 0 评论 -
设计模式-单例模式
设计模式单例模式单例模式要求两点:保证类有且只有一个实例提供一个访问的全局访问点懒汉模式懒汉模式特点:延迟创建实例对象。class Singleton {private: //私有(或者protected)构造函数,防止类外创建对象 Singleton(); //static方法只能调用static数据成员,且该处只是声明inst...原创 2015-10-24 22:34:28 · 511 阅读 · 0 评论 -
C++ 类访问控制
C++ 类访问控制为了隐藏类中的数据成员和成员函数的目的,C++增设了以下三个访问权限限定符: public:public权限的成员称为类的公有成员,可被任何函数访问; private:private权限的成员称为类的私有成员,只能被类的成员函数访问和友元函数访问; protected:只可以被类的成员函数、子类的函数和友元函数访问。关于继承: 列出3种不同继承方式的基类特性和派生类特性:原创 2015-09-23 16:12:06 · 573 阅读 · 0 评论 -
深拷贝 浅拷贝
深拷贝 浅拷贝写了一半,一个没保存,汗。 理解以下6点: 1. 拷贝构造函数 函数名和类名相同,一个必须的参数是类对象的引用变量。class_name(class_name &obj_name) {}参数一定是类对象的引用变量,为什么?因为如果参数是值传递,会导致无限递归,请分析。 2. 默认拷贝构造函数 如果不显示声明拷贝构造函数,编译器会生成默认拷贝构造函数,但是这样存在问题,存原创 2015-09-17 11:12:26 · 859 阅读 · 0 评论 -
C++ vector容器类型及初始化方法
C++ vector容器类型及初始化方法转自: http://imatlab.lofter.com/post/286ffc_a81276 http://www.cnblogs.com/charley_yang/archive/2010/1 这是我看到的讲vector及其初始化中最想要的解释,只是少了二维vector的初始化,我补充了。vector类为内置数组提供了一种替代表示,与st...转载 2015-08-06 09:42:41 · 10072 阅读 · 0 评论 -
C++ 语法
C++ 语法都是从各个博文搜集来的,如有侵权请联系,立刻删除。1. namespace1.1 为什么要有namespace?C++采用单一的全局变量命名空间,为了解决C++中变量、函数的命名冲突而引入namespace。 高端大气上档次的说法是:namespace是为了防止名字污染在标准 C++ 中引入的。它可以将其中定义的名字隐藏起来,不同的名字空间中可以有相同的名字而互不干扰,使用时用域操作符原创 2015-08-16 22:02:48 · 490 阅读 · 0 评论 -
动态创建二维vector数组
转自:http://hi.baidu.com/studyarea/blog/item/57d1cb6e9570b6d881cb4adf.html二维vectorvector > ivec(m ,vector(n)); //m*n的二维vector动态创建m*n的二维vector方法一:vector > ivec;ivec.resize(m);for(int转载 2015-06-05 18:12:38 · 697 阅读 · 0 评论