- 博客(81)
- 资源 (3)
- 收藏
- 关注
原创 QFtp 编译报错 使用了未定义类型“QFtpPrivate”的方法
用vs编译器时,由于有些类的声明放在了qftp.cpp里面,并且这些类是从qobject继承下来,需要用到信号槽的,也即是说,这些类必须经过moc工具编译的。因此在qt5版本中,用vs编译,如果这些需要经过moc工具编译的类在cpp文件中声明,moc工具会查找不到,无法在moc.cpp中为该类生成对应的类,故要将这些类的声明,统统挪到.h中,然后把.cpp文件末的导入moc头文件给注释掉,即可。QFtp属于QT4版本的产物,使用QT5版本时,如果用QTcreator编译有QFtp的源码是没有问题的;
2024-05-10 11:17:31 237
原创 VS在release模式下的代码调试设置
工程项目上右键 --> 属性界面 --> c/c++1) 优化:优化配置 选择已禁止(/Od)2) 常规:调试信息格式 选择 程序数据库(/Zi)或(/ZI), 注意:如果是库的话,只能(Zi)3)连接器:调试 --> 生成调试信息 选择 是 (/DEBUG)...
2022-01-14 17:50:43 607
原创 一行中文注释引发的头疼
今天碰到了一个比较有意思的问题:先说结论:以后注释建议建议遵循如下原则:1)尽量使用英文2)尽量使用块注释(/* note */),少用行注释(// note);符号和注释之间至少使用一个以上的空格分隔。描述如下:由于头文件中使用了如下注释,导致编译时提示(明明在代码中有的属性)属性不存在。//开仓允许使用的最大资金排查问题的方法如下:在开始栏中打开工具:VS2015 x86 本机工具命令提示符使用命令:cl -E -I路径 -I路径 ... -D预处理 ... 源文件.cpp &g
2021-11-11 17:37:25 277
原创 错误 LNK2026 模块对于 SAFESEH 映像是不安全的
解决方法:1.打开该项目的“属性页”对话框。2.单击“链接器”文件夹。3.单击“命令行”属性页。4.将 /SAFESEH:NO键入“附加选项”框中,然后点击应用。
2021-07-06 13:21:21 119
原创 22_设计模式之解析器模式
模式定义:表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。使用动机:软件构建过程中, 如果某一特定领域的问题比较复杂,类似的结构不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。class Expression{public: virtual int interpreter(map<char, int> var) = 0; virtual ~Expression() {}};
2020-09-23 13:10:55 89
原创 21_设计模式之访问器模式
模式定义:表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。使用动机:软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在某类中做这些的更改,将会给子类带来和繁重的变更负担,甚至破坏原有设计。class Visitor;class Element{public: virtual void accetp(Visitor &visitor) = 0; virt
2020-09-23 13:09:17 118
原创 20_设计模式之命令模式
模式定义:将一个请求(行为)封装为一个对象,从而使你可用不懂的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。使用动机:软件构建过程中,“行为请求者”与“行为实现者“通常呈现一种”紧耦合“。但在某些场合--比如需要对象行为”记录,撤销/重做,事务“等处理,这种无法抵御变化的紧耦合是不适合的。...
2020-09-23 13:08:16 85
原创 19_设计模式之职责链模式
模式定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。使用动机:软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显示指定,将必不可少的带来请求发送者与接受者的紧耦合。enum RequestType{ REQ_HANDLER1, REQ_HANDLER2, REQ_HANDLER3};class Request{private: str
2020-09-20 09:39:50 148
原创 18_设计模式之迭代器模式
模式定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露(稳定)该对象的内部表示。使用动机:软件构造过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明的访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。template<typename T>class Iterator{public: virtual void first() { } virtual
2020-09-20 09:38:47 135
原创 18_设计模式之组合模式
模式定义:将对象组合成树形结构以表示“部分--整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性(稳定)。使用动机:软件在某种情况下,客户代码过多的依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性,扩展性等弊端。class Component{public: virtual void process() = 0; virtual ~Component() { }};// 树节点cla
2020-09-20 09:37:20 113
原创 17_设计模式之备忘录模式
模式定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。使用动机:在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公用接口来让其它对象得到对象的状态,便会暴露对象的细节实现。class Memento{private: string m_state; //...public: Memento() { } Memento(const
2020-09-20 09:36:23 84
原创 16_设计模式之状态模式
模式定义:允许一个对象在其内部状态改变时改变它的行为。从而时对象看起来似乎改了其行为。使用动机:在软件构建过程中,某些对象的状态如果改变;其行为也会随之而发生改变,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。enum NetworkState{ OPEN, CLOSE, CONNECT};class NetworkProcessor{private: NetworkState m_state;public: void Operation1
2020-09-20 09:35:23 69
原创 14_设计模式之适配器模式
模式定义:将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。使用动机:在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不能满足的。// 目标接口(新接口)class ITarget{public: virtual void DoTask() = 0; virtual ~ITarget() { }};// 遗留接口(老接口)class ITar
2020-09-20 09:33:34 77
原创 13_设计模式之代理模式
模式定义:为其它对象提供一种代理以控制(隔离,使用接口)对这个对象的访问。使用动机:在面向对象系统中,有些对象由于某种原因(比如对象创建开销大,或者某些操作需要安全控制,或者需要进程的访问等),直接访问会给使用者,或者系统结构带来很多麻烦。class ISubject{public: virtual void process() = 0; virtual ~ISubject() { }};class RealSubject : public ISubject{.
2020-09-20 09:32:24 63
原创 12_设计模式之门面模式
模式定义:为子系统中的一组接口提供一个一致(稳定)的界面,门面模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。使用动机:同种功能性质的组件和其它子系统有过多的耦合。...
2020-09-20 09:31:03 67
原创 11_设计模式之享元模式
模式定义:运用共享技术有效的支持大量细粒度的对象。使用动机:在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行代价(只要指内存需求方面的代码)class Font // 该对象一般是只读的(即:创建后数据不会变){};class FontFactory{private: map<string, Font *> m_fontPool;public: Font *getFont(const string &.
2020-09-20 09:28:58 109
原创 10_设计模式之单例模式
模式定义:保证一个类仅有一个实例,并提供一个该实例的全局访问点。使用动机:在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性,以及良好的效率。class Singleton{private: Singleton();public: static Singleton *m_pSingleton; Singleton *getInstance();};Singleton *Singleton::m_pSingleto.
2020-09-20 09:27:37 74
原创 09_设计模式之构建器
模式定义:将一个复杂对象的构造与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。使用动机:在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂的对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。class House{public: void Init() // 这些流程的执行一定是放在一个Init方法中,而不能放在构造函数中(因为这里调用的存在虚方法) { Buil
2020-09-19 11:58:23 67
原创 08_设计模式之原型模式
模式定义:使用原型实例指定创建对象的种类,然后通过拷贝(深度拷贝)这些原型来创建新的对象。使用动机:在软件系统中,经常面临着“某些结构复杂的对象”的创建工作,由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。class ISpliter{public: virtual void Split() = 0; virtual ISpliter *clone() = 0; // 通过深度拷贝来克隆自己来达到数据状态的继承 virtual ~ISplite
2020-09-19 11:15:40 68
原创 07_设计模式之抽象工厂
模式定义:提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。使用动机:在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时由于需求的变化,往往存在更多系列对象的创建工作。// 数据访问有关的基类class IDBConnection{};class IDBCommand{};class IDBDataReader{};// 抽象工厂方法class IDBFactory{public: virtual IDBC
2020-09-19 10:46:57 74
原创 06_设计模式之工厂模式
模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。使用动机:在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。class ISpliter{public: virtual void Split() = 0; virtual ~ISpliter() { }};class ISpliterFactory{public: virtual ISpliter
2020-09-19 10:45:41 61
原创 05_设计模式之桥模式
使用动机:由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个维度的变化。class MessagerImpl{public: ~MessagerImpl() { }public: virtual void PlaySound() = 0; virtual void WriteText(string &msg) = 0; virtual void Connect() = 0;};class Messager{public: Messager(M
2020-09-19 10:44:41 81
原创 04_设计模式之装饰模式
模式定义:动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,装饰模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数)使用动机:在某些情况下我们可能会“过度的使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。class Stream{public: virtual char Read(int num) = 0; virtual
2020-09-19 10:43:47 67
原创 03_设计模式之观察者模式
模式定义:定义对象的一种一对多(变化)的依赖关系,以便当一个对象的状态发生改变时,所有依赖它的对象都得到通知并自动更新。使用动机:在软件构建过程中,我们需要对某些对象建立一种“通知依赖关系”--一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。class IProgress{public: virtual void DoProgress(float val) = 0; virtual ~IProgress() { }};class Progress
2020-09-19 10:42:43 80
原创 02_设计模式之策略模式
模式定义:定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(支持变化),该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)使用动机:在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何运行时根据需要透明的更改对象的算法,将算法与对象本身耦合,从而避免上述问题。class TaxStrategy{public: virtual double Calc
2020-09-19 10:40:49 66
原创 01_设计模式之模板方法
重构关键技法静态 --> 动态 早绑定 --> 完绑定 继承 --> 组合 编译时依赖 --> 运行时候依赖 紧耦合 --> 松耦合使用动机:在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。如何在确定稳定操作结构的前提下,来灵活对应各个子步骤的变化或者晚期实现需求。class Library{public: virtual ~
2020-09-19 10:39:14 78
原创 00_设计模式之面向对象设计原则
依赖倒置原则高层模块(稳定)不应该依赖底层模块(变化),二者都应该依赖于抽象(稳定) 抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)开放封闭原则对扩展开放,对更改封闭 类模块应该是可扩展的,但是不可修改单一职责原则一个类应该仅有一个引起变化的原因 变化的方向隐含着类的责任Liskov替换原则子类必须能够替换它们的基类 继承表达类型抽象接口隔离原则不应该强迫客户程序依赖它们不用的方法 接口应该小而完备优先使用对象组合,而不是类继承类继承通常为“白箱复用
2020-09-19 10:36:51 68
原创 宏编程
<如何调试>gcc -E 让编译器 在预处理结束后停止,不进行 编译、链接gcc -P 屏蔽编译器 输出预处理结果的 行标记 (linemarker),减少干扰=======================[使用范例如下]=================--->特殊符号和模板元编程不一样,宏编程没有类型的概念,输入和输出都是符号,不涉及编译时的C++语法,只进行编译前的文本替换;一个宏参数是一个任意的符号序列,不同宏参数之间用逗号分隔;每个参数可以是空序列,且空白字符会被忽略
2020-07-10 09:13:59 1622
原创 protobuf编译、安装、使用 (Windows+VS)
<安装Protobuf>1)首先需要下载源代码2)解压后得到一个目录,等下CMake会用到如果你电脑没有CMake,需要去官网下载3)双击打开下载解压后的CMake目录/bin/cmake-gui.exe现在,选择刚才解压的目录,和构建输出目录4)使用VS打开D:/protobuf/build下的项目即可编译,成功后会在如下目录生成如下文件5)把proto文件拷贝到上面的目录中执行[protoc.exe--cpp_out=./ Account.proto],即可生成*.pd.
2020-07-09 16:44:26 579
原创 vi配置文件
把下面的代码拷贝到.vimrc即可使用:set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936,default,latin1set termencoding=utf-8set fileformats=unixset encoding=prc"set encoding=utf-8"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
2020-06-04 14:40:49 200
原创 libpcap介绍
libpcap(Packet Capture Library),即数据包捕获函数库,是Unix/Linux平台下的网络数据包捕获函数库。它是一个独立于系统的用户层包捕获的API接口,为底层网络监测提供了一个可移植的框架。 一、libpcap工作原理 libpcap主要由两部份组成:网络分接头(Network Tap)和数据过滤器(Packet Filter)。网络分接头从网络设备驱动程序中收集数据拷贝,过滤器决定是否接收该数据包。Libpcap利用BSD Packet F...
2020-05-16 14:19:39 386
原创 使用sh -x 调试 shell脚本
[以下内容来自:http://blog.chinaunix.net/uid/20564848.html]1. 通过sh -x 脚本名 #显示脚本执行过程2. 脚本里set -x选项,轻松跟踪调试shell脚本"-x"选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具。“-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示出来,并且在行首显示一个"+"号。 "+"号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。shell的执行选项除了可以在.
2020-05-14 09:58:40 391
原创 关于引用的so命名冲突的问题
今天使用的一个.a文件,导致命名冲突,解决方法如下:1)第1步:使用 ar -x libxxx.a 将静态库中的目标文件取(解压)出来, 放在当前目录下 第2步:使用 gcc -shared *.o -o libxxx.so -fPIC 生成so文件 第3步:使用新的so重新编译,记得编译时加上-Wl,-Bsymbolic...
2019-08-21 10:08:11 371
原创 JS、C#方法互相调用示例
C#代码如下: namespace JsCallWinform{ /* * JS、C#方法互相调用示例 */ [System.Runtime.InteropServices.ComVisibleAttribute(true)] public partial class Form1 : Form { p
2016-03-30 10:21:24 5700 1
转载 C++ 资源大全
摘要:C++是在C语言的基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言。应用较为广泛,是一种静态数据类型检查的,支持多重编程的通用程序设计语言。关于 C++ 框架、库和资源的一些汇总列表,由 fffaraz发起和维护。内容包括:标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。标准库C++ Standard L
2016-02-18 09:39:16 485
原创 VS2012+Qt5
1. 下载zip源码,官方下载地址 http://download.qt.io/official_releases/2.安装python3.解压缩qt-everywhere-opensource-src-5.1.1.zip文件,修改qtbase\mkspecs\win32-msvc2012\qmake.conf文件,将QMAKE_CFLAGS_RELEASE =
2016-02-15 16:35:27 416
转载 typedef struct 用法详解和用法小结
第一篇:typedef struct与struct的区别1. 基本解释typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等)。在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。至于typedef有什么微妙之处,请你
2015-08-25 17:30:55 361
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人