gpt4 book ai didi

c++ - 不能将变量声明为类型,因为以下虚函数是抽象的

转载 作者:行者123 更新时间:2023-11-30 02:56:24 24 4
gpt4 key购买 nike

我有以下代码

类.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

主要.cpp

#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 是一个接口(interface)类,因此它的方法是纯虚拟的。我遇到的问题是 Medhod2 传递类本身的实例(对于接口(interface)是 class1,对于实现此类接口(interface)的类是 class2)。

因此方法2有签名

void method2(class1&) const;

在 class1 和

void method2(class2&) const;

在 class2 中。

这就是我在编译时出现以下错误的原因。

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

我该如何解决这个问题?

有人可以告诉我吗?谢谢。

最佳答案

您的问题是虚拟签名需要匹配(返回类型可以是协变的,否则签名应该相同)。将 class2 的 void method2(class2&) const; 更改为 void method2(class1&) const;

或者,隐藏虚拟方法并提供替换方法:

class class2
{
// must be implemented since pure virtual, but now private
void method2(class1&) const;
public:
void method1(int) const;
void method2(class2&) const;
};

关于c++ - 不能将变量声明为类型,因为以下虚函数是抽象的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15530678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com