【发布时间】:2019-12-14 01:01:53
【问题描述】:
我正在定义可以将函数作为模板参数的类A。 B 类继承 A 类。但是,有错误B: use of class template requires template argument list 和多个其他错误。我在想B 类的声明出错了。但是,我没有为 B 类使用任何模板。有人可以评论吗?
#include <iostream>
void f_global()
{
std::cout << "top level function\n";
}
template<typename F>
class A
{
public:
F f1;
A(F fun1) : f1(fun1) {}
void fa();
};
template<typename F>
void A<F> :: fa()
{
std::cout << "From A<F>::fa()\n";
f1();
}
template<typename F>
class B : public A<F> //error
{
public:
void fb();
};
void B::fb() //error
{
std::cout << "From B::fb()\n";
A::f1(); //Can access f1()?
}
int main()
{
A obja(f_global); //error?
obja.fa();
B objb;
objb.fb();
}
【问题讨论】:
-
就像你对
template<typename F> void A<F> :: fa()做的一样,你需要对void B::fb()做同样的事情。您还有很多其他语法/错字错误。 -
此外,由于模板 A 没有默认构造函数,因此无法构造模板 B,模板 B 期望其超类具有默认构造函数。这里有一些模板使用的基本问题。
-
你说“我没有使用
B类的任何模板”,但你是;template<typename F> class B ...表示B是一个模板。 -
你想让B成为一个模板类吗?也许是 A 的专业化?
-
在你的 main 中,你调用了 f2,但是 f2() 在哪里?