我试图A<F>::f()
从类中调用类函数S
,但是当我实例化一个S
对象(S<int>s
)并调用它的f
成员函数(s.f()
)时出现以下错误:
source.cpp:在“
int S<F>::f() [with F = int]
”的实例化中:
source.cpp:30:21:从这里需要
source.cpp:22:25:错误:“A<int>
”不是“”的可访问S<int>
基础
请注意,当我return A<F>::f();
在类的声明中S
替换为return C<A, F>::f();
. 但我想知道为什么我不能以其他方式做到这一点......
#include <iostream>
template <typename T> class A {
public:
int f();
};
template <typename T> int A<T>::f() {
return sizeof(T);
}
template <template <typename> class E, typename D> class C : E<D> {
public:
int f() {
return E<D>::f();
}
};
template <typename F> class S : C<A, F> {
public:
int f() {
return A<F>::f();
}
};
int main() {
S<int>s;
std::cout << s.f();
}
任何帮助表示赞赏,如果您需要进一步澄清,请随时发表评论。
更新
由于这个问题已经解决,我想我应该发布实际工作的代码:
#include <iostream>
template <typename T> class A {
public:
int f();
};
template <typename T> int A<T>::f() {
return sizeof(T);
}
template <template <typename> class E, typename D> class C : public E<D> {
public:
int f() {
return E<D>::f();
}
};
class S : public C<A, int> {};
int main() {
S s;
std::cout << s.f(); // 4
}