随笔分类 - C++
error 2593 operator << 不明确的可能的解决方法
摘要:编译Martinez算法时遇到该问题,提示重载的<<操作符调用不明确。 解决方法为:在cpp文件中将重载的该操作符的实现前添加完整的命名空间路径。
阅读全文
C++读取mysql中utf8mb4编码表数据乱码问题及UTF8转GBK编码
摘要:数据库编码为utf8,但是由于某些表的一些字段存储了emoji字符,表采用了utf8mb4编码,默认情况下在C++代码中读出的中文字段值都变成了乱码。 解决方法为,在进行数据库查询前,在C++中执行一下“set names utf8”,例如在我的程序里执行下面的语句即可: 读出数据后,将字符转为本地
阅读全文
memset初始化数组的问题
摘要:今天才搞清楚,memset用于初始化数组,仅能初始化为0值,而不能初始化一个特定的值,这怎么能模糊了呢???因此,如果对申请的一段存放数组的内存进行初始化,每个数组元素均初始化为特定的值,必须使用循环遍历来解决。short* pBuffer = (short*)malloc(x_size*sizeof(short));memset(pBuffer, 0x00, x_size*sizeof(short));for (int j=0;j#include int main (){ char str[] = "almost every programmer should know memse
阅读全文
CUDA(5.5)与MySQL 5.6的rint函数定义冲突引起的VS编译器C2264错误
摘要:向CUDA project中添加了如下的包含目录后:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.5\include;..\include_p;..\include_p\gdal;..\include_p\mysql;..\include;..\include_cg;$(IncludePath)在main.cu中添加如下包含文件:#include #include #include #include #include #include #include "cuda_helloworld_kernel.cu"#in
阅读全文
C API向MySQL插入批量数据的快速方法——关于mysql_autocommit
摘要:MySQL默认的数据提交操作模式是自动提交模式(autocommit)。这就表示除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。我们可以通过设置autocommit的值改变是否是自动提交autocommit模式。查询当前数据库事务提交方式的命令为:mysql> show va...
阅读全文
terminate called after throwing an instance of 'std::bad_alloc'
摘要:这个错误,网上搜索到的资料大多是指向内存不足或者内存碎片问题,如下链接http://bbs.csdn.net/topics/330000462http://stackoverflow.com/questions/15671255/c-terminate-called-after-throwing-an-instance-of-stdbad-allochttp://qt-project.org/forums/viewthread/8751我在编写一个并行多边形合并的算法时遇到该问题,导致MPI程序崩溃,反复查看内存占用,没发现内存不足的问题。再次查看各个vector,调用swap释放,再反复查看
阅读全文
RaPC(rasterized polygon clipper): A discrete grid-based polygon clipping algorithm
摘要:RaPC(rasterized polygon clipper)-A discrete grid-based polygon clipping algorithmThis algorithm is a part of my Ph.Dthesis and which is still under developing...Some demo results on clipping of convex polygons or concave polygons with holes are here:INTERSECTION:DIFFERENCE:
阅读全文
error LNK2001: 无法解析的外部符号 _H5T_NATIVE_DOUBLE_g
摘要:最近在编译一个C++动态链接库时遇到一个奇怪的问题,我们基于GsTL实现了GIS地统计分析中的半变异函数分析以及克吕格插值,GsTL在计算半变异函数时依赖HDF5库,当添加了HDF5的头文件、lib以及dll后,编译遇到如下错误:1>Link:1> 正在创建库 ..\lib\gtsta.lib 和对象 ..\lib\gtsta.exp1>gt_rasterinterpolationopimp.obj : error LNK2001: 无法解析的外部符号 _H5T_NATIVE_DOUBLE_g1>..\Release\gtsta.dll : fatal error LN
阅读全文
linux下sprintf_s函数的替代
摘要:windows平台下线程安全的格式化字符串函数sprint_s并非标准C函数,因此linux下无法使用,但可以使用snprintf函数代替。/*函数原型:*/int snprintf(char *dest, size_t n, const char *fmt, ...);/*函数说明: 最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n的话,将不会溢出。函数返回值: 若成功则返回存入数组的字符数,若编码出错则返回负值。推荐的用法:*/void f(const char *p){ char buf[11]={0}; snprintf(buf, si...
阅读全文
Crashed when delete OGRSpatialReference objects!
摘要:Crashed when delete OGRSpatialReference objects!OGRSpatialReference* oSRS = new OGRSpatialReference();oSRS->SetFromUserInput(constChrPtr);{ ... }delete oSRS;//crashed here!//OSRDestroySpatialReference(oSRS) ;//also crashed!//why?/*Some one say that may be there are defects in the destructor o...
阅读全文
linux下编译复数类型引发的错误:expected unqualified-id before '(' token
摘要:该类型错误一般由头文件引用顺序的问题引起,默认情况下gcc编译器一般会给出问题出处以及所涉及到的所有的头文件,只需要调整#include <complex>以及引用该头文件的其他文件在报错.cpp文件中的引用顺序即可,一般将该文件或者引用该头文件的头文件置于自定义头文件的前面。
阅读全文
no matching function for call to "namespace::class1::foo(class2&)"
摘要:在将windows下的代码移植到linux平台下时遇到该问题,原因是C++编译器规定临时变量不能作为非const的引用传递。如:foo1::(class2& obj){ ...}foo2::(){ ... return foo1(class2::createObj());}在函数foo2中如此调用foo1函数将报错,正确办法是修改foo1参数为const类型或者显式声明临时变量。如:foo1::(const class2& obj){ ...}foo2::(){ ... return foo1(class2::createObj());}//或者foo1::...
阅读全文
mysql操作数字名称的schema时字符的逃逸问题
摘要:一个简单的问题折腾了好大一会儿,mysql不支持直接操作数字名称的schema,在sql操作时必须做字符逃逸,如:char sql_str[1000];memset(sql_str, 0x0, 1000);sprintf(sql_str, "CREATE TABLE IF NOT EXIST `%s`.`%s`(data_id INT(1), remark VARCHAR(256)) ENGINE MyISAM", schemaName, tableName);
阅读全文
调用Boost库出现的问题
摘要:网络分析用了boost库实现,引入boost/graph下的一堆hpp,结果导致出错:3类错误出现在concept_check.hpp文件中:error C2143:语法错误:缺少")" (在‘?’的前面)error C2334: “:”的前面有意外标记: 跳过明显的函数体error C2838: "false_" : 成员声明中的非法限定名解决办法:此类错误一般是boost文件引用顺序不正确导致,一般保证在引用其他库的头文件之前先引用boost的头文件即可解决该问题。MARK之~
阅读全文
C#调用CLI封装的非托管C++ DLL报错:未能加载由**.dll导入的过程
摘要:今天需要做一个用C#调用CLI封装的标准C++ DLL的DEMO,以前运行的好好的,结果今天就报出了这个错误:未能加载由**.dll导入的过程。本人也是很长时间没有用C#做这种事情了,在排除路径和dll缓存问题之后,想了半天还应该是底层库出了问题,没办法,把所有非托管的C++dll挨个替换成最新的版本,重新编译执行,一切就OK了,看来该整治一下版本混乱的问题了。
阅读全文
VS2010环境与OpenMP远程多线程访问MySQL数据库的限制和困惑
摘要:标准C++代码,打开OpenMP编译选项得到debug/release版本的可执行程序A.exe,A.exe是一个socket监听服务,监听端口port的请求。A接收到请求会创建一个新的线程t去调用B.dll中的算法完成计算任务,并返回线程t的执行时间。B.dll中会有查询MySQL数据的操作,查询分为2种类型:批量查询和单个查询。线程t会执行部分OpenMP代码,OpenMP for循环代码部分包含了向mysql数据库查询单个数据的语句。批量查询得到的数据放在内存中,因此可以被线程t所启动的多个OpenMP线程(我是4核8线程的i7CPU,一般我设置启动8个OpenMP线程,正常情况下...
阅读全文
C++生成随机数:Beta分布(beta distribution)
摘要:double cls_random::randomBeta( double alpha, double beta){ /*Johnk's beta generator*/ double u, v; double x, y; do { u=cls_random::randomUniform(); v=cls_random::randomUniform(); x=pow(u,1/alpha); y=pow(v,1/beta); } while (x+y>1); return x/(x+y...
阅读全文
C++生成随机数:瑞利(Rayleigh)分布(Rayleigh distribution)
摘要:double cls_random::randomRayleigh(double sigma){ double pv = sigma*sqrt(-2 * log(cls_random::randomUniform())); return pv;}期望:E=方差:V=wiki:http://zh.wikipedia.org/wiki/%E7%91%9E%E5%88%A9%E5%88%86%E5%B8%83
阅读全文
C++生成随机数:possion(泊松)分布(possion distribution)
摘要:long cls_random::randomPossion(double lambda){ double x = -1, u; double log1, log2; log1 = 0; log2 = -lambda; do { u = cls_random::randomUniform(); log1 += log(u); x++; }while(log1 >= log2); return x; }期望:E=lambda方差:V=lambdawiki:http://zh.wikipe...
阅读全文