我有以下代码
类.h
#ifndef CLASSES_H
#define CLASSES_H
#include <iostream>
using namespace std;
template< class T1, class T2>
class class1
{
public:
virtual void method1(int) const =0;
virtual void method2(class1&) const =0;
};
template< class T1>
class class2:public class1<T1,int>
{
public:
void method1(int) const;
void method2(class2&) const;
};
template< class T1>
void class2<T1>::method1(int i) const
{
cout<<"class2::method1 - before Call %i"<<endl;
cout<<"class2::method1 - after Call"<<endl;
}
template< class T1>
void class2<T1>::method2(class2& c2) const
{
cout<<"class2::method2 - before Call"<<endl;
cout<<"class2::method2 - after Call"<<endl;
}
#endif
主文件
#include <cstdlib>
#include <iostream>
using namespace std;
#include "Classes.h"
int main(int argc, char *argv[])
{
class2<int> c2;
c2.method1(0);
c2.method2(c2);
system("PAUSE");
return EXIT_SUCCESS;
}
基本上,C1 是一个接口类,因此它的方法是纯虚拟的。遇到的问题是 Medhod2 传递和类本身的实例(接口是 class1,实现此类接口的类是 class2)。
因此 Method2 有签名
void method2(class1&) const;
在 class1 和
void method2(class2&) const;
在类2。
这就是我在编译时收到以下错误的原因。
main.cpp: In function `int main(int, char**)':
main.cpp:12: error: cannot declare variable `c2' to be of type `class2<int>'
main.cpp:12: error: because the following virtual functions are abstract:
Classes.h:14: error: void class1<T1, T2>::method2(class1<T1, T2>&) const [with
T1 = int, T2 = int]
make: *** [main.o] Error 1
我该如何解决这个问题?
有人可以告诉我吗?谢谢。