C++
开心罗
每天一小步
展开
-
虚基类
虚基类的作用 当一个基类被声明为虚基类后,即使它成为了多继承链路上的公共基类,最后的派生类中也只有它的一个备份。例如:class CBase { };class CDerive1:virtual public CBase{ };class CDerive2:virtual public CBase{ };class CDerive12:public CDeriv转载 2015-05-09 16:07:44 · 618 阅读 · 0 评论 -
std::min&std::max与mfc冲突问题
这个问题非常讨厌,时不时会冒出来。综合了网上的多种解决方法,总结了一下。在项目的 stdafx.h 文件中,确保包含自己写的头文件行放在文件尾部。然后在开头处加上三行,就好了。例子如下:// 需要加上以下三行#define NOMINMAX#undef max#undef min// 从这里开始就可以使用 std::min和std::max了#include "my原创 2015-10-11 17:09:24 · 788 阅读 · 0 评论 -
vector删除元素和查找
需要这样一个容器,可以自动地删除重复元素,并能很方便地进行查找操作!似乎采用树型结构存储的std::set是最佳之选,但到后面才发现,存进去容易,取出来麻烦。不得已又回去用std::vector,就在网上找了找,vector是如何实现类似set的unique和find的。其实也没有想象的复杂,也不需要死去套循环~ vector删除重复元素主要思路为,先排序,再唯一,转载 2016-01-21 09:39:43 · 763 阅读 · 0 评论 -
vector详细用法
vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1.文件包含: 首先在程序开头处加上#include以包含所需要的类文件vector 还有一定要加上using name转载 2016-01-21 09:46:49 · 488 阅读 · 0 评论 -
gdal vs2013编译
32位编译主要参考http://malagis.com/win7-vs2010-gdal.html64位编译参考http://www.2cto.com/kf/201308/237944.html以及官网http://trac.osgeo.org/gdal/wiki/BuildingOnWindows----------------------------------------转载 2016-01-06 15:57:51 · 724 阅读 · 0 评论 -
编译第三方库debug和release不同文件形式的编译
在CMakeLists文件加入SET( CMAKE_DEBUG_POSTFIX "-gd" CACHE STRING "add a postfix, usually d on windows" )语句,生成的debug版本的lib和dll文件文件结尾都是-gd。方便第三方在不同编译环境下的使用原创 2016-01-13 17:12:02 · 896 阅读 · 0 评论 -
vs2013-qt5编译兼容xp时常遇问题
vs2013-qt5编译兼容xp时常遇问题需要qt平台依赖项 将plantforms整个文件夹置于可执行程序下针对vs2013项目需要对属性设置进行更改 配置属性-常规-平台工具集-Visual Studio 2013 - Windows XP对于较早vs版本编译的动态库 以vs2008为例需要:msvcr90(d).dll,msvcp90(d).dll,msvcm90(d).dll,以原创 2016-08-01 17:17:14 · 462 阅读 · 0 评论 -
CMakeLists多目录通用模板及Win&Linux兼容动态库编写
CMakeLists多目录通用模板CMake不仅具有跨平台(一次编写,多次编译)的特点,还有便于工程管理的特点,支持CMake的IDE也有很多(VS[MS],QT,CodeBlock等)。以一个通用组织的工程(包含PCL,VTK,libLAS第三方库)为示例,具有含义从英语意思进行理解 工程树状图 ├── Calibration │ ├── CMakeLists.txt │原创 2017-03-01 18:50:02 · 2209 阅读 · 0 评论 -
VisualStudio 跨平台(Linux)调试
Visual GDB 跨平台调试简介Visual GDB是集成在VisualStudio上的一款跨平台C++调试插件,终于可以在Linux上用到宇宙第一IDE了。虽然在VS2015中可以安装跨平台的Linux插件,但暂时还不能用CMake组织代码。使用方法新建VisualGDB项目 会出现警告,直接 点击确定即可 工程类型设置 Linux主机连接 设置主机ip,可以是物理机或虚拟机,可以自行百原创 2017-04-23 12:42:19 · 3060 阅读 · 1 评论 -
ubuntu控制台设置
ubuntu中qt默认的控制台是xterm,程序运行时控制台的字体很小,也不美观,可以通过:工具->选项->环境->概要将终端设置为gnome-ternimal, 即ubuntu默认的系统终端原创 2016-12-02 09:45:07 · 2898 阅读 · 0 评论 -
qt工程cmakelists编写注意事项
qt CMakeLists.txt直接给出一个成功示例如下:cmake_minimum_required (VERSION 3.5 FATAL_ERROR)project(pcl-visualizer)# 一般当前目录设置为直接包含目录set(CMAKE_INCLUDE_CURRENT_DIR ON)find_package (VTK REQUIRED)find_package (PCL R原创 2016-12-01 20:21:04 · 4921 阅读 · 0 评论 -
qt程序图标设置
首先,准备一个图标,例如:zx.ico,并新建一个文本文档,在里面添加一行:IDI_ICON1 ICON DISCARDABLE"zx.ico"重命名为:zx.rc并保存,和你的程序图标zx.ico一起放到QT工程目录下;然后,在QT工程文件.pro里面最后新添加一行:RC_FILE = zx.rc最后,在程序中添加代码:app.seWindow转载 2016-09-07 14:50:08 · 349 阅读 · 0 评论 -
qt带空格路径问题
qt中涉及到空格路径,qmake是无法正确编译的。需要在空格路径前面加上$$quoteINCLUDEPATH += $$quote(C:/Program Files/MySQL/MySQL Server 5.7/include)LIBS+= -L$$quote(C:/Program Files/MySQL/MySQL Server 5.7/lib) -llibmysql原创 2016-02-29 21:09:21 · 3359 阅读 · 3 评论 -
cmake构建qt工程
cmake vs qmakeqmake 是为 Qt 量身打造的,使用起来非常方便cmake 使用上不如qmake简单直接,但复杂换来的是强大的功能内置的 out-of source 构建。(目前QtCreator为qmake也默认启用了该功能。参考:浅谈 qmake 之 shadow build)为各种平台和场景提供条件编译可处理多个可执行文件情况,和很好配合 Qt转载 2015-10-11 16:09:14 · 735 阅读 · 0 评论 -
在dll中导入模板类与模板函数
假设我们有一个模板类如下:templateclass CArray{public:CArray();private:T *m_pData;}templateCArray::CArray() { m_pData = NULL; } 模板函数如下:templatevoid Swap(转载 2015-10-10 16:17:09 · 1236 阅读 · 0 评论 -
C++全局变量的声明和定义
源自http://blog.csdn.net/candyliuxj/article/details/7853938(1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作:第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件;第二步,将工程中所有的obj文件进行LINK,生成最终.exe文件。 那么,错转载 2015-10-10 13:12:11 · 556 阅读 · 0 评论 -
C++细节7
C++ 类复制控制是任意C++类必不可少的一部分。如果没有显式定义这些操作,编译器将为我们定义它们,但针对某些类而言,依赖默认定义会导致灾难。有一种常见的情况需要定义自己的复制控制成员的:类具有指针成员。直接初始化和复制初始化复制初始化使用=符号,而直接初始化直接将初始化式放在圆括号中。直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。原创 2015-06-18 15:55:43 · 384 阅读 · 0 评论 -
C++细节8
操作符的重载重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置对象的操作符的定义大多数重载操作符可以定义为普通非成员函数火雷的成员函数作为类成员的重载函数,其形参看起来不操作数数目少1.作为成员函数的操作符有一个隐含的this形参,限定为第一个操作数。重载一元操作符如果作为成员函数就没有显式形参。iostream对原创 2015-06-18 16:34:17 · 399 阅读 · 0 评论 -
C++细节1
1、为了让多个文件访问相同的变量,C++中区分了声明与定义。声明用于向程序表明变量的类型和名字,使用extern关键字,不分配存储空间。非const变量默认为extern//f1.cppint a = 3;//f2.cppextern int a;++a;在f1.cpp中a为非const变量,和extern int a = 3 等价。当变量为const类原创 2015-06-01 11:24:21 · 482 阅读 · 0 评论 -
C++细节2
在C++标准库中定义了内容丰富的抽象数据类型:string和vector,以及bitset。string类型输入操作符1、读取并忽略开头所有的空白操作符(空白,换行,制表符)2、读取字符直到再次遇到空白字符getline(std::cin, string)函数将istream作为返回值,string类型不含换行符。任何***.size()的返回类型都为***::size_typ原创 2015-06-02 09:53:47 · 376 阅读 · 0 评论 -
C++细节3
C++字符串数组char a[]有两种初始化的方式。利用花括号,元素使用','分隔。直接用字符串初始化,这种方式下默认最后一个元素为'\0'。数组下标的类型为size_t.程序中指针变量最好初始化,初始化主要有4种形式.1、取已经定义的变量的地址。2、直接赋字面值常量0.3、赋0值const整型对象4、直接赋NULL.(需要包含头文件,在该头文件中NUL原创 2015-06-02 10:12:38 · 365 阅读 · 0 评论 -
C++细节4
对于整型数a,b来说,取模运算或者求余运算的方法都是:1.求 整数商: c = a/b;2.计算模或者数: r = a - c*b.求模运算和求余运算在第一步不同: 取模运算在取c的值时,向无穷小方向舍入(fix()函数); 而求余运算在计算c的值时,向0方向舍入(floor()函数)。在撤销动态创建的内存时,需要将指针置为0,否则该指针会变为悬垂指针,这往往会导致原创 2015-06-03 10:53:04 · 403 阅读 · 0 评论 -
C++细节5
是键值对的集合,唯一的约束是键类型必须支持 map::key_type 键类型map::mapped_type 关联值类型map::value_type pair类型与vector不同的是用下标访问不存在的元素将导致在map容器中添加一个新的元素,它的键即为下标值原创 2015-06-11 11:40:19 · 451 阅读 · 0 评论 -
C++细节6
泛型算法大多数算法是通过遍历两个迭代器标记的一段元素来实现其功能。典型情况下,算法在遍历一段元素范围时,操纵其中的每一个元素。大多数情况下,每个算法都需要使用至少两个迭代器来指出该算法操纵的元素范围,第一个迭代器指向第一个元素,而第二个迭代器所指向的迭代器本身不是要操作的元素,而是被用作终止遍历的哨兵。对指定数目的元素做写入运算,或者写到迭代器的算法,都不检查目标的大小原创 2015-06-15 13:56:32 · 415 阅读 · 0 评论 -
项目配置技巧
可以同脚本命令快速获得lib文件夹下面的所有lib文件名新建一个文本文档在文档中输入DIR *.lib /B> LIST.TXT将后缀名设置为.bat双击运行,在LIST.txt中就会出现所有的lib文件名原创 2015-07-30 15:29:46 · 357 阅读 · 0 评论 -
vs中编写qt程序的代码提示
在vs中安装完qt插件后,建立QProject进行程序的编写会发现关于qt部分没有代码提示。其中最主要的原因是没有将qt库配置到vs项目中去。为了简单起见,可以建立一个属性表,以后其他的QProject中可以直接调用。再属性管理器中新建属性表名字任意,具体内容如下 D:\Qt\4.8.6\bin;$(ExecutablePath)原创 2015-10-10 12:58:12 · 2293 阅读 · 0 评论 -
LINK:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
很多伙伴在更新VS2010,或者卸载VS2012安装2010后,建立Win32 Console Project/MFC项目时会出现"LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏"的错误。错误描述:1>正在编译资源...1>正在编译资源清单...1>正在链接...1>LINK : fatal error LNK1转载 2015-10-10 12:31:08 · 377 阅读 · 0 评论 -
C/C++中调用matlab引擎计算
原帖地址:http://blog.sina.com.cn/s/blog_6adcb3530101cvot.html一,在linux环境使用matlab引擎必须先进行一些必要的配置1,matlab引擎依赖/bin/csh启动,所以不管你使用何种shell,都必须安装csh。**2,matlab引擎依赖的动态库文件目录必须在系统当前的库函数搜索路径中。即可以设置环境LD_LIB转载 2015-10-10 12:33:03 · 833 阅读 · 0 评论 -
qt&gdal
转自:http://blog.csdn.net/deirjie/article/details/37872743使用需要自行配置Qt和GDAL路径。 近期写了一个高光谱图像光谱曲线匹配的算法,想封装到软件当中方便观察效果,也便于做后期算法改进和实际应用,并且以后的算法可以直接集成上来。于是打算自己写一个基本的框架实现图像浏览的一些基本功能。在网上各种找,利用GDAL进行遥感图转载 2016-01-11 16:09:18 · 1628 阅读 · 0 评论