如何在头文件中正确声明以模板类为返回类型的函数?
解决方法:前向声明模板类
你需要在OtherModule.h中前向声明模板类Matrix,而不是直接使用显式实例化。显式实例化的前提是编译器已经知晓Matrix是一个模板类,否则无法识别对应的语法。
具体修改OtherModule.h如下:
// OtherModule.h // 前向声明模板类Matrix,告知编译器这是一个接受单个模板参数的类模板 template <class X> class Matrix; // 现在可正常声明返回Matrix<double>类型的函数 Matrix<double> do_stuff();
为什么你的显式实例化写法不生效?
你写的template class Matrix<double>属于显式实例化指令,作用是要求编译器生成Matrix<double>这个特化的完整代码,但使用它的前提是编译器已经见过Matrix模板的声明(至少是前向声明)。你之前的写法里没有任何关于Matrix的声明,编译器根本不知道Matrix是什么,自然会报错,所以这个写法不生效。
补充说明
这种前向声明仅适用于函数声明阶段:编译器只需要知道Matrix<double>是合法类型即可,不需要它的完整定义(比如类的大小、成员函数细节等)。而在函数实现文件OtherModule.cpp中,你已经包含了Matrix.h,拿到了Matrix模板的完整定义,完全可以正常实现do_stuff()函数,不会有任何问题。
内容的提问来源于stack exchange,提问作者ST11280709
相关产品推荐
相关产品推荐

