【发布时间】:2019-06-23 18:03:59
【问题描述】:
我有一个模板类,它有一个泛型形式的大成员函数,所以通读它不是很容易。 我决定将此函数移到类主体之外,并在与“.hpp”同名的“.cpp”文件中实现它,但我无法通过编译。 如果我以专用形式而不是通用形式实现它,则可以编译/链接它,即使它也保存在“*.cpp”文件中。
代码如下:
ClassC.hpp:
#pragma once
template <typename T>
class ClassC {
public:
ClassC( T* p ) : d( p ) {};
void show();
private:
T* d;
};
ClassC.cpp
#include <iostream>
#include "ClassC.hpp"
#include "ClassD.hpp"
using namespace std;
// this is a specialized version, and can be compiled/linked.
template <>
void ClassC<ClassD>::show() {
cout << "This is a specialized ClassC." << endl;
};
// this is my generic version, and can not be compiled.
template <typename T>
void ClassC::show() {
cout << "This is a generic ClassC." << endl;
};
/* */
ClassD.hpp
#pragma once
#include "ClassC.hpp"
class ClassD {
public:
ClassD(): c( this ) {};
void show();
private:
ClassC<ClassD> c;
};
ClassD.cpp
#include <iostream>
#include "ClassD.hpp"
using namespace std;
void ClassD::show() {
c.show();
cout << "This is ClassD" << endl;
};
main.cpp
#include "ClassD.hpp"
int main() {
ClassD d;
d.show();
return 0;
};
【问题讨论】:
-
右侧有相关问题列表。看看那些,尤其是名为Why can templates only be implemented in the header file?的那个。
-
如果您在特定问题上需要帮助,那么您需要告诉我们具体问题是什么。你得到什么错误?如果你不能具体,那我们就不能给出具体的答案。也请阅读how to ask good questions,以及this question checklist。
-
当我添加通用版本时,我评论了专业。
-
path/of/the/ClassC.cpp:16:6: error: ‘template
class ClassC’ used without template parameters