C++ C++;使用抽象基类的具体虚方法

C++ C++;使用抽象基类的具体虚方法,c++,polymorphism,virtual-functions,C++,Polymorphism,Virtual Functions,我有一个抽象基类,它混合了纯虚方法和具体虚方法,例如: template < class T > class A { public: A ( ) { } virtual ~A ( ) { } virtual void purefunc( const T & a, T & b ) const = 0; virtual T concretefunc ( const T & a ) { T b;

我有一个抽象基类,它混合了纯虚方法和具体虚方法,例如:

template < class T > class A {
   public:
   A ( ) { }
   virtual ~A ( ) { }

   virtual void purefunc( const T & a, T & b ) const = 0;
   virtual T concretefunc ( const T & a ) { 
       T b;                 // requires new memory allocation for b
       purefunc( a, b ); 
       return b; 
   }
};
它给出了我遇到的编译错误。不知道为什么重载不起作用,而不同的方法

template < class T > class B : A < T > {
//                             ^^^^^^^

(另外,您应该在A和B中添加
public:
,以便可以在外部访问这些方法。)

感谢您指出这一点。忘了在我的虚拟示例中设置分类器。但在我的实际代码中,public已经存在了。所以这并没有解决问题。(我希望我的伪代码现在是正确的)。您更新的代码为我编译。请不要发布您没有费心测试的代码!很抱歉。我想我已经用一个适当的简化的例子表达了我真正的问题。事实上,这个例子是可以编译的。这就是区别:在我的实际代码中,purefunc和concretefunc都有相同的名称func。为什么它不能与重载方法一起工作?(我怎样才能适当地修改我的帖子?“显式类型转换”这里没有转换,只有一个引用绑定,它执行从派生到基于隐式的转换
int a = 2, b;
B< int > B_obj( 2 );
b = B_obj.concretefunc( a );  //!! doesn't work: 'no matching function for call'

B< int > * B_ptr = &B_obj;
b = B_ptr->concretefunc( a ); //!! doesn't work either: 'no matching function for call'

A< int > * A_ptr = &B_obj;
b = A_ptr->concretefunc( a ); //!! works, but explicit type casted isn't very intuitive
virtual void func( const T & a, T & b ) const = 0;
virtual T func ( const T & a ) { ... }
template < class T > class B : A < T > {
//                             ^^^^^^^
template < class T > class B : public A < T > {