我很清楚这是一个非常新的问题,我为此道歉,但我一直在搜索,我找不到解决方案。
我有以下文件:
headertest.hpp
template<typename t>
class HeaderTest {
private:
int x;
public:
//HeaderTest();
t addition(t a, t b);
};
ImplementationTest.cpp
#include "headertest.hpp"
template<typename t>
t HeaderTest<t>::addition(t a, t b) {
return a + b;
}
int main() {
int x = 2;
int y = 3;
}
让我们说我想要对这两个整数x和y求和,我将如何使用我的方法添加?
答案 0 :(得分:2)
int main() {
int x = 2;
int y = 3;
HeaderTest<int> ht; // Instantiate a HeaderTest
int z = ht.addition(x, y); // Use its member function.
}
请注意,模板定义不应位于cpp文件中。这可以在这里工作,因为main
在同一个文件中,但您必须将其放在标题中以供正常使用。
编辑关于标头/ cpp问题。
你完全明白了。声明(接口)放在头文件中,定义(实现,即实际代码)放在cpp文件中。
但是,模板是此规则的例外。模板的定义必须在其实例化时完全可访问。当你使用模板时,你必须包含所有的源代码(而不是&#34;普通&#34;对象,其声明就足够了),这是一件好话。最简单的方法是什么?把它全部放在标题中。
如果这看起来不干净,那么可以选择:将模板定义放在第三个文件中,通常称为&#34;模板实现文件&#34;并扩展.tpp。然后,只需#include
您的头文件底部的tpp文件。
答案 1 :(得分:0)
将以下两行添加到main()函数中:
HeaderTest<int> test;
cout << test.addition(x, y);
因此,首先必须为整数创建一个HeaderTest对象。接下来,当您将add定义为成员函数时,可以将其应用于此测试对象的整数x和y。