关于项目中的一记录和心得

1.全局变量和全局函数的使用:

    当一个项目中两个文件A.cpp,B.cpp之间没有存在必然的联系,A.cpp中需要获取B.cpp中定义的一些数据内容,可以通过使用全局变量来实现这个功能。比如在项目车辆二次识别中,在输入解析时需要获取批量输入时的图片的Id(std::string),然后将其放入容器vector中,在B.cpp中需要获取图片Id,并加以整合输出组装json,但是B.cpp和A.cpp之间没有继承关系,也不存在友元关系,并且框架已经搭好,只能通过全局变量和函数来实现。

在A.cpp中定义全局变量 std::vector<std::string> vecImageId; 在B.cpp中使用extern std::vector<std::string> vecImageId; 

这样就可以解决编译的时候double define的问题。

2.当链接的时候报 ld return 1的错误时,多半是链接器在库路径中找不到库文件,或者在项目配置的时候出现问题。

首先得确保库文件已经存在,并且库文件的路径正确包含,并且已经添加库文件。已vs2017中添加curl库为例

关于项目中的一记录和心得

库的路径:

关于项目中的一记录和心得

保证库的附加库目录中存在所需要的库文件。

接下来配置环境变量通过配置是export LD_LIBRARY_PATH=/home/kiseeto/ImageObjectExtractionService/lib

3.关于内存使用的问题:

a.一般在c/c++项目中经常要是用自己动态分配的内存。

clss A;

A* pA = new A();

对于指针pA来说不能做地址的便宜,如果需要对pA来做地址偏移可以来找到一个替身,对pA做拷贝,让替身做指针的偏移工作,否则在释放pA所指向的内存空间,会报错。

b.要做到动态内存分配以后,并且赋值也使用完毕,并且数据处理也完毕以后,要做到随即释放内存空间。

比如在车辆二次识别的项目中,当输入解析完成以后,经过sdk算法以后会生成一个json的字符串,然后将字符串解析,在解析过程中会涉及到动态内存的分配,解析完成以后需要将数据重新组装成新的json字符串。组装完成以后需要对动态分配的内存及时的释放。