关于undefined reference to——C++模板类文件组织方式
来源:互联网 发布:淘宝助理线上回收站 编辑:程序博客网 时间:2024/05/17 08:33
转载自:http://kyleven.blog.163.com/blog/static/733813072010102444930449/
今天在实现一个Lock Free的vector时,因为vector的实现方式采用了template的方式实现(后续文章会展示Lock Free的vector的具体实现代码!),在编译的时候出现了如下图中的问题,按照这篇文章的方法解决了问题。但是原理究竟是什么,还不清楚,需要了解编译连接的详细过程!
以前有人问过我C++的.h文件和.cpp文件的组织方式,当时很随口的回答,.h中是类的声明,.cpp中是类的实现。最近要实现简单二叉树结构,所以用到队列类,我以queue.h,queue.cpp,最后用main.cpp作为测试文件,queue.cpp中#include "queue.h",并在main.cpp中#include "queue.h",想来这是常规的文件组织方式,不会错的。结果却是构建(编译通过,链接错误)过程中出现undefined reference to 一些queue中的方法。显然,编译器找不到该类中的方法。
解决方法一,在main.cpp中#include "queue.cpp",而非"queue.h",这种方式就如同将队列类的声明实现放在同一文件中。
解决方法二,在queue.h中,代码部分结尾处#include "queue.cpp",并且去掉queue.cpp里的包含语句,这与上述方式如出一辄,只是在main.cpp中看上去就像习惯中的方案一样。
解决方法三,声明类时,在类名前加上export关键字,抱歉如今的c++编译器中这关键字多半行不通。就像foreach之类的关键字一样,多半会被认为是关键字,但是却是编译器不认识的。
综上,因为C++模板类中的处理方法不一样,因为需要传入参数才能确定内存如何分配,所以编译完成时并没有解决所有问题,在main.o中便会,找不到它需要用到的方法了。
- 关于undefined reference to——C++模板类文件组织方式
- 关于undefined reference to——C++模板类文件组织方式
- undefined reference to *** —— 类成员
- 关于GCC模板出现"undefined reference to"的错误
- 关于GCC模板出现"undefined reference to"的错误
- undefined reference to '__ctype_get_mb_cur_max'——libxerces-c
- [C++] Undefined reference to vtable
- C++: undefined reference to vtable
- c : undefined reference to `sin'
- [C++]Undefined reference to 'vtable for C***'
- C++(Qt)静态成员类undefined reference to “xxx”
- 关于undefined reference to `inflate'问题解决方法
- 关于 undefined reference to 的错误
- 关于undefined reference to "function name"
- 关于undefined reference to 'gluPerspective' 解决方法
- 关于将undefined reference to `*'的解决方法
- port php to android—Fix "undefined reference to zm_startup_password"
- C 语言 undefined reference to 'sqrt' 问题解决
- SLIC超像素分割
- MyBatis最新官方下载地址
- 【OSI】--数据链路层
- redis类型[string 、list 、 set 、sorted set 、hash]
- Maven入门学习
- 关于undefined reference to——C++模板类文件组织方式
- 在Eclipse中使用JUnit4进行单元测试(初级篇)
- ADO.NET提供的Connection类总结
- C++语言的表达式模板:表达式模板的入门性介绍
- R连接mysql以及一些操作
- HTTP状态代码以及定义(深度好文,赶紧收藏)
- Caffe学习系列(17):模型各层特征和过滤器可视化
- (OK) 运行cBPM in Fedora23
- 数据结构系统调用机制