这是我的代码的一部分: .h文件中的声明:
virtual bool operator==(const File& file) const = 0;
和.cpp文件
bool File::operator==(const File& file) const {
return true;
}
我收到此编译错误:
1>c:\users\talw\desktop\hw5\hw5\project1\main.cpp(76): error C2259:
'Directory' : cannot instantiate abstract class
1> due to following members:
1> 'bool File::operator ==(const File &) const' : is abstract
1> c:\users\talw\desktop\hw5\hw5\project1\file.h(57) : see
declaration of 'File::operator =='
请帮忙。 感谢
答案 0 :(得分:2)
这是一个纯虚拟运算符重载,使您的类抽象,因此您可以在同一个类中使用函数实现,但无法实例化一个给出以下错误的抽象类。
无法实例化抽象类
抽象File
类的派生类可以实现此函数并可以实例化。
答案 1 :(得分:1)
显然,你的复制粘贴错误。删除=0
,你就可以了。
它导致您的Directory
类成为抽象基类,因此您无法拥有它的实例。
答案 2 :(得分:0)
错误消息的含义是什么?
您的MSVC错误消息对应于从抽象类Directory
派生类File
的确切情况:
1>c:\users\talw\desktop\hw5\hw5\project1\main.cpp(76): error C2259:
'Directory' : cannot instantiate abstract class
1> due to following members:
编译器向您解释说,您继承自新类中未覆盖的抽象成员函数:
1> 'bool File :: operator ==(const File&)const':是抽象的
1 GT; c:\ users \ talw \ desktop \ hw5 \ hw5 \ project1 \ file.h(57):见
声明'File :: operator =='
如何解决?
要使您的Directory类成为具体类,必须先在类中声明operator==
以覆盖它(请注意关键字override
是可选的):
class Directory : public File {
//...
public:
bool operator==(const File& file) const override ;
};
然后你将提供DERIVED类的定义:
bool Directory::operator==(const File& file) const {
return true;
}
这是唯一的解决方案吗?
但是,如果你的意图是真正定义类File
的虚函数,那么你只需要删除类定义中=0
的{{1}}。 operator==
将成为所有派生类的虚函数的默认实现,除非它们使用更具体的类重写它。