C++
文章平均质量分 84
啊拉丁的鱼
这个作者很懒,什么都没留下…
展开
-
C++(11) enum枚举类型详解
C++ enum枚举类型详解《enum枚举用法攻略》一节已经介绍过枚举数据类型,还记得吗?它们是由程序员定义的数据类型,由一组称为枚举量的值组成,枚举量代表整数常量。本节将进一步介绍枚举数据类型的应用,以及使用它们能做和不能做的事情。在同一个语句中声明 enum 数据类型并定义变量以下代码使用了两行来声明一个枚举数据类型,并定义了该类型的变量:enum Car {PORSCHE, FERRARI, JAGUAR};Car sportsCar;但是,C++允许在同一个语句中声明一个枚举.转载 2020-07-27 15:54:46 · 2767 阅读 · 0 评论 -
variable has incomplete type EVP_CIPHER_CTX(aka evp_chipher_ctx_st)
问题如标题,之所以出现这个问题,是因为系统从ubuntu16.04升级到ubuntu18.04之后,系统的openssl版本也跟着升级了。在新版的openssl中,不支持EVP_CIPHER_CTX ctx这样的扩展,但是代码中的写法未同步升级导致。做如下更改即可:旧的写法:新写法如下:...原创 2020-06-05 14:38:19 · 4661 阅读 · 1 评论 -
C++ 基类继承 出现undefined reference to vtable for Cxxx错误
报错如下:网上关于这个问题的解决基本上都是说,该基类中的虚函数,没有被子类继承导致。但是这完全不是我遇到的情况,因为我在子类中确实已经全部实现了。其中基类的函数定义如下,有多个,这里只列举其中一个:有的甚至没有实现(没有加花括号)虽然该基类中的每个虚函数在子类中都有继承并实现了,但是编译的时候就会报这个错误。我的解决方法如下:把每个虚函数转为纯虚函数,不要使用{},修改为纯虚函数只要加给该虚函数赋值0就可以了,如下:基类中的所有虚函数全部改为纯虚函数,问题得以解.原创 2020-06-03 11:09:23 · 8869 阅读 · 4 评论 -
error: invalid use of incomplete type
error: invalid use of incomplete type一.首先,要确定自己定义的类是完整的,构造函数,析构函数都有,函数的声明及定义分开在.h和.cpp中实现。如果确定类是完整的,仍然出现error: invalid use of incomplete type的报错,那么问题出现在该类的使用上,而不是类的实现上.二.在使用某个已经实现的类时: 如果只是定义某个类的指针,可以使用class关键字先进行声明,而不需包含头文件; 但如果涉及到定义某个类的对象或转载 2020-05-31 17:16:02 · 18436 阅读 · 2 评论 -
C++ 11 创建和使用 unique_ptr
C++ 11 创建和使用 unique_ptrunique_ptr不共享它的指针。它无法复制到其他unique_ptr,无法通过值传递到函数,也无法用于需要副本的任何标准模板库 (STL) 算法。只能移动unique_ptr。这意味着,内存资源所有权将转移到另一unique_ptr,并且原始unique_ptr不再拥有此资源。我们建议你将对象限制为由一个所有者所有,因为多个所有权会使程序逻辑变得复杂。因此,当需要智能指针用于纯 C++ 对象时,可使用unique_ptr,而当构造uniqu...转载 2020-05-26 16:22:40 · 328 阅读 · 0 评论 -
C++11的模板类型判断——std::is_same和std::decay
C++11的模板类型判断——std::is_same和std::decay问题提出:有一个模板函数,函数在处理int型和double型时需要进行特殊的处理,那么怎么在编译期知道传入的参数的数据类型是int型还是double型呢?如:#include <iostream>template<typename TYPE>void typeCheck(TYPE data){ ...转载 2020-05-18 17:13:09 · 1925 阅读 · 0 评论 -
C++函数模板(Function Template)
C++函数模板(Function Template)C语言中文网推出辅导班啦,包括「C语言辅导班、C++辅导班、算法/数据结构辅导班」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践 + 永久学习。QQ在线,随时响应!在《C++函数重载》一节中,为了交换不同类型的变量的值,我们通过函数重载定义了四个名字相同、参数列表不同的函数,如下所示: //交换 int 变量的值void Swap(int *a, int *b){ int temp = *a; *.转载 2020-05-18 16:51:58 · 571 阅读 · 0 评论 -
QT undefined reference to `xxxr,缺失系统库的解决方案
能引起这个问题的原因很多,概括上来说,就是无法定位到代码声明所在。我的这种情况,只需要添加系统库对应的库进来即可。右键项目,添加系统库,选择对应的库原创 2020-05-13 16:13:28 · 531 阅读 · 0 评论 -
[c++11]我理解的右值引用、移动语义和完美转发
[c++11]我理解的右值引用、移动语义和完美转发c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。左值、右值C++中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的持久化对象,右值是指表达式结束时就不再存在的临时对象。所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正...转载 2020-01-21 16:33:53 · 277 阅读 · 0 评论 -
C++中的&和&&
C++的&和&&转载请注明文章出处:https://tlanyan.me/and-operator-in-cpp/c++的&和&&是两个常用且容易让人混淆迷惑的运算符,其中&符号有三种用途,&&有两种。本文对这两个运算符的用途做简要总结。&的用途第一种用途:位运算中的“与”(AND)。位...转载 2020-01-21 12:00:06 · 14213 阅读 · 0 评论 -
C++中 引用&与取地址&的区别
转自:https://blog.csdn.net/qq_26501341/article/details/58192662转载 2020-01-21 11:48:18 · 186 阅读 · 0 评论 -
ubuntu 升级QT5.11/13到5.14编译出现undefined reference to 'qt_version_tag'的错误
备注:1、一开始从5.11升级到5.13没有记录完整的解决过程,这次升级到5.14完善了这些过程,本文章重新编辑存档2、以下操作建立在卸载旧版,已经安装新版的前提下。旧版本卸载到安装目录下,执行Maintenance Tool即可问题如题,本地的QT是5.11(更新过一次到5.13),之后再更新到5.14之后,重新编译项目,出现undefined reference to ...原创 2019-11-18 19:24:19 · 3068 阅读 · 0 评论 -
C\C++ 中 malloc、calloc、realloc 函数的用法
C\C++ 中 malloc、calloc、realloc 函数的用法转自:https://www.jianshu.com/p/d6f209b8796d前言C\C++提供了底层的内存操作,为程序提供了强大的能力。在使用 malloc() calloc() realloc() 进行动态内存分配时,内存区域中的这个空间称为堆(heap),另一个内存区域,称为栈(stack),其...转载 2020-01-08 09:46:45 · 1003 阅读 · 0 评论 -
QT导入库文件源码,有.h.in文件,但提示找不到对应.h文件
.h.in是一个模板文件,它是在cmake或者automake的过程中产生的一个用于输入设置信息等功能的中间文件。它会在你调用confing、automake等.sh文件之后,自动生成一个相应的.h文件,然后就可以在源码中调用。所以,一般情况下,如果遇到这个问题,只要把源码下载,并按照官方的automake/autoconf规范执行一次,就可以得到该文件对应的.h文件了,就可以拷贝给QT载入用...原创 2019-12-23 16:27:56 · 5831 阅读 · 0 评论 -
C++ static_cast、dynamic_cast、const_cast和reinterpret_cast(四种类型转换运算符)
C++ static_cast、dynamic_cast、const_cast和reinterpret_cast(四种类型转换运算符)上节讲到,隐式类型转换是安全的,显式类型转换是有风险的,C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么。但是,这种强调风险的方式还是比较粗放,粒度比较大,它并没有表明存在什么风险,风险程度如何。再者,C风格的强制类型转换...转载 2019-12-02 17:54:14 · 283 阅读 · 0 评论 -
使用 openssl 进行 RSA 加解密(C++)
一. 生成密钥对在 OPENSSL 中, RSA 是一个很重要的结构体。它的定义在 rsa_locl.h 中,面包含了在原理中提到的所有重要的变量 随机质数 p, q, 公钥指数 e, 私钥指数 d, 以及模数 nstruct rsa_st { // ... BIGNUM *n; BIGNUM *e; BIGNUM *d; BIGNUM *p...转载 2019-11-28 10:43:20 · 4728 阅读 · 0 评论 -
C++中NULL和nullptr的区别
在编写C程序的时候只看到过NULL,而在C++的编程中,我们可以看到NULL和nullptr两种关键字,其实nullptr是C++11版本中新加入的,它的出现是为了解决NULL表示空指针在C++中具有二义性的问题,为了弄明白这个问题,我查找了一些资料,总结如下。一、C程序中的NULL在C语言中,NULL通常被定义为:#define NULL ((void *)0)所以说NULL实...转载 2019-11-27 16:23:01 · 197 阅读 · 0 评论 -
ubuntu 升级QT版本后,在新机上发布QT程序报错:qt.qpa.plugin: Could not find the Qt platform plugin “xcb” in “”
本地原本使用的QT版本是5.11,最近更新成了5.13.2;在本地编译、运行一切正常;发布release版本到新的ubuntu上;由于在新机器上没有安装QT,所以发布的时候通过ldd导致出程序的依赖库,把这些依赖库和程序放在同一目录一起拷贝到新机器上,初次运行需要指定库目录,否则会报找不到库文件的错误:指定程序执行的库文件目录,在终端输入指令:export LD_LIBR...原创 2019-11-25 16:32:51 · 9242 阅读 · 2 评论 -
class xxxx has virtual method but non-virtual destructor
主要内容:1、C++类继承中的构造函数和析构函数2、C++多态性中的静态绑定和动态绑定3、C++多态性中析构函数声明为虚函数1、C++类继承中的构造函数和析构函数在C++的类继承中,建立对象时,首先调用基类的构造函数,然后在调用下一个派生类的构造函数,依次类推;析构对象时,其顺序正好与构造相反;具体参考文章:http://www.cnblogs.com/And...转载 2019-11-19 17:40:35 · 1112 阅读 · 0 评论 -
QT C++ redeclaration of 'xxxx' 错误
如题,在一次对代码升级的时候,突然就出现这个错误:error: redeclaration of ‘xxxx’ ^由于这个错误报错时,直接跳到声明处,很难看到实质是由哪个文件引起的bug;网上查了一堆资料都无解。后来经过大量排查后发现是修改代码时粗心造成的一个bug:代码示意:void f...原创 2019-11-19 15:30:39 · 9024 阅读 · 0 评论 -
应用程序运行***buffer overflow detected*** terminated Aborted异常退出问题
今天运行程序,改了一段代码!然后每次一运行程序就异常退出,打印如下信息:*** buffer overflow detected ***: ./shm_costomer terminatedAborted根据单词的意思是缓存越界的问题!自己反复检查了自己修改的那部分代码,发现不存在这种情况!然后直接把自己这段代码屏蔽掉重新编译再运行,发现程序还是挂掉了!但是这个程序之前几个月都运行的好好的,...转载 2019-10-14 11:16:15 · 1803 阅读 · 0 评论 -
ubuntu 程序启动指定程序依赖库,解决无法启动问题
有的时候,特别是release方式启动的程序,往往需要指定程序启动的依赖库位置,否则无法启动程序,如下:这时,需要先指定程序所需要的这些依赖库的位置:"export LD_LIBRARY_PATH=/opt/Qt5.11.0/5.11.0/gcc_64/lib"然后再重新启动即可。...原创 2019-10-14 10:44:01 · 747 阅读 · 0 评论 -
如何在VS2012 C++项目里面添加静态库文件lib
先说说普通的两种方法:方法1: 通过设置工程配置来添加lib库.转自网上:A、添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录。B、添加文件引用的lib静态库路径:工程---属性---配置属性---链接器---常规---附加库目录:加上lib文件存放目录。C 然后添加工程引用的lib文转载 2016-05-08 15:03:45 · 12872 阅读 · 4 评论 -
C#调用DLL的几种方法,包括C#调用C\C++\C#DLL
C#中dll调用方法一、 DLL与应用程序动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式实现。动态链接库是不能直接执行的,也不能接收消息,它只是一个转载 2016-11-20 17:46:10 · 33743 阅读 · 4 评论 -
C++宏定义详解
一、#define的基本用法 #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。1 #define命令剖析1转载 2017-09-19 14:16:01 · 396 阅读 · 0 评论 -
C/C++宏定义中的do{...} while(0)
C/C++宏定义中do{…} while(0)的用途今天在pthread_create()的manual中看到了一个宏定义的函数:#define handle_error_en(en, msg) \ do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)#define handle_error(msg) \转载 2017-09-19 14:20:32 · 646 阅读 · 0 评论 -
Linux下QT图形界面开发 - 概述(1)
一、QT简介 Qt是一个跨平台的C++图形用户界面库,.由挪威TrollTech公司出品,目前包括Qt/X11,基于Frambuffer的Qt Embedded,快 速开发工具Qt Designer几国际化工具Qt Linguist等.Qt支持Unix及Linux系统,还支持 Windows NT/Windows 2k及Qindows 95/98平台.Qt的良好封装机制使其模块化程度非常高,转载 2017-09-19 18:08:31 · 15006 阅读 · 1 评论 -
C++中的const,static const和static类成员的初始化问题
C++中, const, static const, static这三种类成员的初始化容易出问题:const 作为类成员,只能在构造函数初始化列表中被初始化(C++98);(C++11提供了类内初始化,因此内类常量可在声明类时进行类内初始化,因此该类内常量的作用域属于类级,即该类的所有对象均具有同一个值。)static 作为类成员,所有类对象共享该成员,只能在类外部的.cpp文件中被初转载 2017-10-17 17:46:59 · 593 阅读 · 0 评论 -
C++中的static关键字的总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。1.面向过程设计中的static1.1静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1#include转载 2017-10-17 17:48:48 · 313 阅读 · 0 评论 -
C++标准转换运算符const_cast
前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述。C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymorphism)”。要想很好的使用多态性,就免不了要使用指针和引用,也免不了会碰到转换的问题,所以在这一篇,就把导师讲的以及在网上反复查阅了解的知识总结一下。C++提供了四个转换运算符:c转载 2017-10-18 09:18:33 · 351 阅读 · 0 评论 -
关于typedef的用法总结
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,以下是引用的内容(红色部分是我自己写的内容)。用途一:定义一种类型的别名,而不转载 2017-11-16 19:08:48 · 278 阅读 · 0 评论 -
return *this和return this有什么区别?
return *this返回当前对象, return this返回当前对象的地址(指向当前对象的指针)。 正确答案为:return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是克隆, 若返回类型为A&, 则是本身 )。return this返回当前对象的地址(指向当前对象的指针), 下面我们来看看程序吧:[cpp] view plain cop转载 2017-12-10 11:36:36 · 461 阅读 · 0 评论 -
C++ map的基本操作和使用
Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的构造函数; mapmapstring; mapmapint; mapmapstring; mapmapchar; mapmapchar; mapmapint;转载 2017-12-19 20:55:00 · 193 阅读 · 0 评论 -
assert定义和用法
编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。使用断言可以创建更稳定,品质更好且不易于出错的代码。当需要在一转载 2017-12-12 11:20:52 · 991 阅读 · 0 评论 -
linux中fork()函数详解
一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进转载 2017-12-12 11:44:33 · 360 阅读 · 0 评论 -
QT 为按钮添加事件
-.在vs2010环境中。在QT designer中为helloword.ui添加pushbutton ,返回vs(1):第一种方式:在helloword.h中添加:public slots: void ClickButton();在helloword.cpp中:构造函数中添加:connect(ui.button_exit, SIGNAL(转载 2017-12-04 15:23:32 · 29818 阅读 · 1 评论 -
Qt入门之信号与槽机制
一. 简介就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。信号和槽机制是 Qt 的核心机制,可以让编程人员将互不相关的对象绑定在一起,实现对象之间的通信。信号当对象改变其状态时,信号就由该对象发射 (emit) 出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号。这样就做到了真正的信转载 2017-12-04 19:08:44 · 310 阅读 · 0 评论 -
C++中的STL中map用法详解
C++中的STL中map用法详解Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map转载 2017-12-13 15:48:21 · 273 阅读 · 0 评论 -
boost之Boost.Foreach遍历
类似perl和c#的foreach,BOOST_FOREACH给我们带来了一种简单而有效的遍历数组的方式。让我们首先来看个简单的例子:[cpp] view plain copy #include #include #include int main() { std::string hello( "Hello, world!"转载 2017-12-13 15:51:57 · 925 阅读 · 0 评论 -
使用 boost.foreach foreach
用过别的语言的朋友一定深受foreach这个命令所带来方便,可惜C++并没提供,随着1.34.0 boost.foreach正式成为boost的一部分,而且boost.foreach相当的简单易用。从此c++也有了foreach。一、使用方法语法:BOOST_FOREACH( VAR, COL ){ // To do}非常简单明了例:#includ转载 2017-12-13 15:54:20 · 472 阅读 · 0 评论