C++
learner_pu
这个作者很懒,什么都没留下…
展开
-
fatal:io.h:没有那个文件或目录
问题:在引入头文件的时候#include<io.h>然后编译的时候,出现了如下的问题: fatal:io.h:没有那个文件或目录。解决:#include<sys/io.h>. 加个sys, 不要去find. io.h然后cp。原创 2022-01-12 21:22:52 · 3367 阅读 · 1 评论 -
虚拟机xml文件使用
基本概念 镜像(mirror):是把很多文件打包放在一起,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本就称为镜像。它是一种文件存储形式。使用GHOST等软件来进行构成镜像和拆镜像的功能。 映像(image) :将资料和程序结合的文件,是数据的物理结构,现在基本上特指VIM格式(主要用在系统封装和引导盘上)。可以用来做还原。这都是按接口分 ide磁盘:把控制器和盘体集成在一起的磁盘驱动器,IDE接口硬盘多用于家用产品中,也部分应用于服务器。 sata磁盘:SATA原创 2021-08-18 14:33:52 · 2560 阅读 · 0 评论 -
函数只有参数从const转到非const构不构成重载?
1.值传递作为参数,加const构不构成重载int te(const int a){ return a;}int te(int a) { return a;}int main(){ int value = 1; std::cout << te(value) << std::endl;}answer:不构成,而且还会报重定义的错,因为这是值传递,value只是把值传进去了,并不是把自己传进去。那么修改也是对a的修改,就是在te函数的作用空间的一个值原创 2021-06-24 18:12:01 · 309 阅读 · 0 评论 -
数组传递的几种方式
普通数组传递#include <iostream>using namespace std;void get_size(int a[5]){ std::cout << sizeof(a) << std::endl; for(int i = 0; i < 5; i++) std::cout<<a[i]<<std::endl;}int main(){ int a[5] = { 1, 2, 3, 4, 5}; get_s原创 2021-06-19 10:58:45 · 5041 阅读 · 0 评论 -
how breakpoints work
There are two types of breakpoints, one is hardware breakpoint. the other is software breakpoint.Hardware BreakpointHardware breakpoints are implemented by the chipset being used. When the instruction matchs an instruction configured in peripheral regist原创 2021-06-17 14:43:44 · 144 阅读 · 0 评论 -
member initialization list
Member InitializationFoo(int num) : bar(num) {};understand like thisint bar = num;equivalentFoo(int num) : bar() {bar = num;}the object will be constructed and initialized in one operation. like copy constructor.Member AssignmentFoo(int num){原创 2021-06-17 14:42:33 · 188 阅读 · 0 评论 -
STL里map的第三个参数
首先看看STL里对map的定义template<class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair<const _Kty, _Ty>>> class map : public _Tree<_Tmap_traits<_Kty, _Ty, _Pr, _Alloc, false>>第一个是key,第二个是value,第三个是原创 2021-06-02 18:41:44 · 1350 阅读 · 1 评论 -
struct、类的字节数怎么算
有的时候我们需要算一个结构体的字节数,算的时候是根据它里面的成员来算的,但并不是这些成员字节数的简单加和。首先我们要清楚结构体在内存中是按单元来存储的,单元的字节数是按数据中占最大字节数的成员为基准的。比如有double,有int,有char,按double的8来开辟。1.牛刀小试struct Data{ double value; char val; int a;};int main(){ std::cout << sizeof(Data) << std::原创 2021-05-27 17:33:29 · 712 阅读 · 0 评论 -
vector删掉多个数值相同的元素
#include<iostream>#include <vector>int main(){ std::vector<int> v = { 8, 10, -5, 8, 3, 8}; if (v.size() == 0) return -1; for (int i = int(v.size()) - 1; i >= 0; i--) { if (*(v.begin() + i) == 8) v.erase(v.begin() + i);原创 2021-05-26 16:05:30 · 474 阅读 · 0 评论 -
std:sort()的第三个参数--匿名函数
我们知道algorithm的std::sort()函数可以实现一个vector的排序,只需要传进去要排序范围的起始和终止迭代器就可以了。但是它其实是可以接受第三个参数的,就是一个匿名函数,这里面就是std::vector里的数据成员的一个比较规则的函数。然后它的返回值是一个bool值。你可以指定按照什么方式进行排序。比如说最基本的一个类里有两个成员,然后以其中的m_a作为基准从小到大排序#include <vector>#include <iostream>#includ原创 2021-05-26 15:29:03 · 3021 阅读 · 0 评论 -
error LNK2005: “int __cdecl test(void)“ (?test@@YAHXZ) already defined in test.obj
相信大家编程的过程中都遇到过这个报错的问题,但为什么会报这个错,我们来探究一下。问题复现a.h#pragma once#ifndef _TEST_#define _TEST_int test(){ return 1;}#endifa.cpp#include "a.h"main.cpp#include "a.h"int main(){ return 0;}就这样就报错了,根本没做什么啊。首先我们要知道一个东西,头文件其实是不存在的,它会在预编译阶段把整个原创 2021-05-09 10:41:03 · 897 阅读 · 1 评论 -
拷贝构造函数必须写引用吗?
拷贝构造函数必须写引用吗?是的,因为如果不写成引用,就会有一个很尬尴的情况,就是因为是值传递,所以传进来的参数会被拷贝一次,但这个拷贝,只能使用拷贝构造函数来拷贝,而使用这个,就得又拷贝一次,然后会这样陷入死循环。所以只能用引用。而const倒是无所谓,有const最好。...原创 2021-04-24 21:16:08 · 720 阅读 · 1 评论 -
using namespace std到底发生了什么???(猜想)
之前一直觉得using namespace std;之后,会把命名空间的函数拷贝到全局空间。答案是否定的证明1.分别查看加了这句话和不加这句话obj文件的大小,结果发现,大小是一样的。2.查看引用namespace前和后同一个文件的地址。namespace name{ void hello() { int a = 1;}int main(){ std::cout << name::hello ; using namespace name; std::cout &原创 2021-04-23 18:37:56 · 132 阅读 · 0 评论 -
为什么析构函数要写成虚函数
子类构造函数调用顺序:先父类,再子类(先建立基础,再大楼)子类析构函数调用顺序:先子类,再父类(先拆大楼,再拆基础)为什么析构函数要写成虚函数因为如果一个父类指针装了一个子类对象,在析构的时候如果不是虚函数,它会调父类的析构函数,这样的话,如果子类有新的成员变量,就会出现内存泄漏的情况,没有被释放。...原创 2021-04-23 17:10:20 · 133 阅读 · 0 评论 -
为什么构构函数不能是虚函数
子类构造函数调用顺序:先父类,再子类(先建立基础,再大楼)子类析构函数调用顺序:先子类,再父类(先拆大楼,再拆基础)为什么构构函数不能是虚函数1、因为它作用在刚刚被创建的时候,调本身的构造函数完了。2、析构函数写成虚函数是因为父类指针装子类对象的情况,构造的时候不会出现这种情况啊,对象都没有呢,咋虚函数。而且虚函数表也是对象创建以后才有的。所以构造函数根本不具备成为虚函数的条件。总结:为什么析构函数不能是虚函数,是不必,是不能。...原创 2021-04-23 17:09:47 · 101 阅读 · 0 评论 -
C++ 加const能不能构成重载的几种情况
1.值传递作为参数,加const构不构成重载int te(const int a){ return a;}int te(int a) { return a;}int main(){ int value = 1; std::cout << te(value) << std::endl;}answer:不构成,而且还会报重定义的错,因为这是值传递,value只是把值传进去了,并不是把自己传进去。那么修改也是对a的修改,就是在te函数的作用空间的一个值原创 2021-04-23 16:32:27 · 3765 阅读 · 2 评论 -
理解#define定义宏
深入理解#define X(宏)在写这种东西的时候,是否有困惑,它到底是什么东西?#ifndef __TEST_H__#define __TEST_H__首先回到#define的定义 #define A B : 将标识符A定义B的别名。那么根据这个定义我们来看这个宏,它其实是说把定义的东西赋值成空,因为后面啥也没有,如果它的意思是定成空,就是一个宏,它存在在代码中也跟不存在一样。下面的语句是可以编译的,因为它就是int a = 200;int __FACILITYOBJ_PM_H__原创 2021-04-18 07:40:05 · 785 阅读 · 0 评论 -
osg键盘事件
OSG中键盘事件不响应的解决办法,按下键盘后鼠标事件也不响应了1、换输入法为英文状态2、(若1不行)换键盘为美式键盘原创 2021-03-20 19:41:05 · 700 阅读 · 0 评论 -
c++错误合集
错误1:abort() has benn called很可能是数组越界了原创 2020-08-25 10:16:35 · 164 阅读 · 0 评论 -
opencv
sobel算子原创 2020-08-21 07:34:05 · 101 阅读 · 1 评论 -
为什么使用size_t而不用int
size_t代表unsigned int,主要用于vector的下标索引,它可以达到足够大的索引值。原创 2020-07-27 10:21:45 · 428 阅读 · 0 评论 -
break;和return;的区别
return;不返回任何值,作用跟break;差不多,但break只能退出一层,但return;有多少层就能退出多少层,使函数结束。原创 2020-07-24 13:46:52 · 155 阅读 · 0 评论 -
堆栈
1、堆内存是程序员手动分配和释放的,c:malloc和free c++:new和delete,(delete的时候会调用析构函数)2、栈内存是系统自动分配和释放的。原创 2020-07-21 10:09:07 · 76 阅读 · 0 评论 -
如何让dll项目运行结果的值打印到output
1、先在dll项目文件中,trace6要显示的值。2、打断点3、到test项目文件中调用要显示内容的函数。4、debug,即可显示要打印的内容到output原创 2020-07-13 09:48:47 · 576 阅读 · 0 评论 -
调用公司的函数库
1、把库文件放到一个文件夹下。2、打开vs项目文件保存到这个文件夹下3、再把dll项目文件和test代码放到一个文件夹下4、General设置5、c/c++ General添加这么一行6、Linker上面的选项保持默认,下面的改成框里的东西7、引入头文件,记得加上命名空间,前面8、在pch.h里加入你需要在你的预编译文件里添加些代码#include “targetver.h”#define _ATL_CSTRING_EXPLICIT_CONSTRUCTOR原创 2020-06-28 07:51:51 · 278 阅读 · 0 评论 -
上面是dll导出设置_FOOTPOINT需要定义到项目设置的C++的预定义里 下面这部分是头文件的写法,__ARCH__H宏是为了防止重复定义错误的
上面是dll导出设置_FOOTPOINT需要定义到项目设置的C++的预定义里下面这部分是头文件的写法,__ARCH__H宏是为了防止重复定义错误的原创 2020-06-18 10:48:22 · 110 阅读 · 0 评论 -
vs2017 dll项目和test做单元测试
一、创建dll项目1.新建项目2.创建文件pch.h是预编译的文件,所以不要把自己写的代码直接放到下面二、测试项目1.这是dll项目文件夹下的文件2.原创 2020-05-18 15:17:22 · 774 阅读 · 0 评论