C++ C++;模板申报单
我正试图编译一个最小的示例来实例化 模板类。该示例在特定顺序下编译良好 保留了一组声明,否则将失败 温度h:C++ C++;模板申报单,c++,templates,gcc,C++,Templates,Gcc,我正试图编译一个最小的示例来实例化 模板类。该示例在特定顺序下编译良好 保留了一组声明,否则将失败 温度h: #include <iostream> template <bool display> class test { public: void sayHi(); }; #包括 模板 课堂测试{ 公众: void sayHi(); }; 临时cpp: #include "temp.h" template <bool display>
#include <iostream>
template <bool display>
class test {
public:
void sayHi();
};
#包括
模板
课堂测试{
公众:
void sayHi();
};
临时cpp:
#include "temp.h"
template <bool display>
void test<display>::sayHi () {
if (display) std::cout << "Hi";
}
#包括“温度h”
模板
无效测试::sayHi(){
如果使用模板(display)std::cout,则声明和定义必须在同一个文件中。可以将所有代码放在一个文件中(函数定义是否内联取决于您),或者将声明和定义分开,但将定义文件包含在.h文件底部
是的
tmp.h:
#include <iostream>
template <bool display>
class test {
public:
void sayHi();
};
#include "tmp.cpp"
#包括
模板
课堂测试{
公众:
void sayHi();
};
#包括“tmp.cpp”
tmp.cpp和main.cpp保持不变(但您不将tmp.cpp交给编译器进行编译,因为它包含在tmp.h中)
许多人用模板扩展名代替.cpp扩展名的文件名(它让你知道它不是编译的,而且它看起来比包含.cp文件更不奇怪),但是你不必。 见C++ FAQLite条目。
sayHi()
方法的定义(又名正文)必须在temp.h标头中,或者在另一个包含的文件中;当实例化test
单行摘要时,需要完整的代码:模板不是类型,类型定义必须包含在(至少)一个翻译单元中。(在您的代码中,test
的类型定义不包含在任何TU中。)
#include <iostream>
template <bool display>
class test {
public:
void sayHi();
};
#include "tmp.cpp"