c++编译错误
来源:互联网 发布:万网 域名 转移 编辑:程序博客网 时间:2024/05/18 04:49
1.如果变量是类中的静态成员,需要先在类外部初始化。否则会出现此种错误
二。头文件包含了,却报
zsp_ipc_proxy_client.hh:8:1: 错误:expected class-name before ‘{’ token
代码:class ZSP_IPC_Proxy_Client : public ZSP_IPC_Host
解决:需要提前声明类:class ZSP_IPC_Host;
头文件包含其实是一想很烦琐的工作,不但我们看着累,编译器编译的时候也很累,再加上头文件中常常出现的宏定义。感觉各种宏定义的展开是非常耗时间的,远不如自定义函数来得速度。这里仅就不同头文件、源文件间的句则结构问题提出两点原则,仅供参考:
第一个原则应该是,如果可以不包含头文件,那就不要包含了。这时候前置声明可以解决问题。如果使用的仅仅是一个类的指针,没有使用这个类的具体对象(非指针),也没有访问到类的具体成员,那么前置声明就可以了。因为指针这一数据类型的大小是特定的,编译器可以获知。
第二个原则应该是,尽量在CPP文件中包含头文件,而非在头文件中。假设类A的一个成员是是一个指向类B的指针,在类A的头文件中使用了类B的前置声明并编译成功,那么在A的实现中我们需要访问B的具体成员,因此需要包含头文件,那么我们应该在类A的实现部分(CPP文件)包含类B的头文件而非声明部分(H文件)。
三。在zsp_code/policy下编译出现:
/work/zsp_code/zsp/lib/libxorp_ipc.so:对‘make_cookie()’未定义的引用
描述:在libxorp_ipc下的一个文件zsp_ipc_proxy_client.cc使用了libxorp_finder下的一个文件finder.cc中的函数make_cookie(),zsp_ipc_proxy_client.cc已经#include "finder.hh".
解决,在policy的makefile中需要引用到libxorp_finder
四:c++调用c动态库
1.c++程序使用一个c动态库中的函数,编译爆出错误:
info-collect.cpp:(.text+0xd1b): undefined reference to `waf_log_client_connect(char*)'
2.分析
waf_log_client_connect是c动态库中函数。如何要在c++中使用,需要在头文件中用extern "C"声明
总结:c++调用c动态库过程:
1.makefile中连接:动态库为libcommon
CFLAGS = -g3
target = info-collect_new
INCLUDE = -I /usr/local/waf/common/include
lib = -lcommon -lpthread
dirlib = -L /usr/lib/x86_64-linux-gnu/ -L /usr/local/waf/common/lib/
object = $(patsubst %.cpp,%.o,$(wildcard *.cpp))
$(target):$(object)
g++ $(CFLAGS) $(INCLUDE) $(object) -o $(target) $(dirlib) $(lib)
$(object):%.o:%.cpp
g++ $(CFLAGS) $(INCLUDE) -c $< -o $@
.PHONY : clean
clean:
rm $(object) $(target)
2.要在c++程序头文件info-collect.h中使用extern "C"声明这些函数。
#ifdef __cplusplus
extern "C" { // 告诉编译器下列代码要以C链接约定的模式进行链接
#endif
int waf_log_client_connect(char* server_path);
int waf_log_client_write(int fd, char* process_name, int is_deffered, char *content);
int waf_log_client_check_conn(int fd);
void waf_log_client_destroy(int fd);
#ifdef __cplusplus
}
#endif
注意不能包含这些函数所在库的头文件。比如info-collect.h不能有#include "waf_log_client.h"。否则会报错:
error: previous declaration of ‘int waf_log_client_connect(char*)’ with ‘C++’ linkage
info-collect.h:24:45: error: conflicts with new declaration with ‘C’ linkage
- c编译常见错误
- c++MFC编译错误
- C语言编译错误
- 常见的c编译错误
- C/C++编译常见错误
- linux c 编译错误一览
- c语言常见编译错误
- C语言编译错误记录
- C语言编译常见错误
- C语言-常见编译错误
- C/C++编译错误整理
- C语言 编译错误处理
- C/C++编译链接错误解决方法 汇总
- gcc编译C程序出现段错误
- C编译时常见告警和错误
- Linux 下C语言编译错误
- 常见c语言编译错误解析
- 常见c语言编译错误解析
- spark core 2.0 MemoryManager
- 第三方微信支付
- 发布RichCommon 1.2.7
- 创建一个设备节点 主要命令及参数
- POJ 3522 最大边与最小边差值最小的生成树(最小生成树的性质)
- c++编译错误
- iOS学习笔记-013.UISwitch——开关控件
- 使用友盟导致cocoapods library not found for -lPods
- 【CodeForces 630K】-Indivisibility 容斥原理
- MES项目导入-基础知识-汽车行业解决方案
- Big Data(5): Matrix Factorization算法实现
- 神经网络反向传播
- Unable to compile class for JSP 问题解决方法
- 【亲测】centos6.5 gitlab服务器搭建和初步配置