我写了一个带有两个组件的类,一个随机类型T和一个整数,我实现它如下: 在Test.h中,如:
template <class A, int B>class Test { // two components,
private:
A first;
int second;
public:
Test();
Test (A,int);
}
在Test.cpp中我做了:
template <class T,int i> Test<T,i>::Test() {}
template <class A,int i>Test<A,i>::Test(T a, int b):first(a) {second=b;}
但在主要功能中:
Test<int, int > T1; //It can not be passed
Test<int, 4> T2; //It can not be passed
int x = 8;
Test<int, x> T3 (3,4);// can not be passed
如何从上面的泛型类声明对象实例?
答案 0 :(得分:0)
您忘记了类模板定义末尾的分号。
答案 1 :(得分:0)
template <class T,int i> Test<T,i>::Test() {}
template <class A,int i>Test<A,i>::Test(T a, int b):first(a) {second=b;}
您需要将这两个模板函数定义放在标题而不是.cpp
中 - 实际代码需要对所有调用这些函数的编译单元可用,而不仅仅是声明。
Test<int, int > T1; //It can not be passed
这是无效的,第二个int
是一种类型,但模板需要int
值
Test<int, 4> T2; //It can not be passed
这个
没有错int x = 8;
Test<int, x> T3 (3,4);// can not be passed
您需要创建这些行中的第一行static const x = 8
(即使x
成为编译时常量)以使其可用作模板参数
在课程定义的最后还有缺少的分号。