Inheritance c++/cli sintaxis:错误:';新';或';覆盖';是必需的,因为此声明与函数匹配 我想用C++编写一个包装器,用C++图形接口与C++库通信。
当我想在c++/cli中实现继承时,出现了我的问题: 这个想法: 抽象类B继承自抽象类A 类C继承自抽象类BInheritance c++/cli sintaxis:错误:';新';或';覆盖';是必需的,因为此声明与函数匹配 我想用C++编写一个包装器,用C++图形接口与C++库通信。,inheritance,c++-cli,abstract-class,Inheritance,C++ Cli,Abstract Class,当我想在c++/cli中实现继承时,出现了我的问题: 这个想法: 抽象类B继承自抽象类A 类C继承自抽象类B public ref class A_Wrapper abstract { public: A_Wrapper(void); virtual double solve(OtherWrapper ^) =0; }; public ref class B_Wrapper abstract: public A_Wrapper { private: B * nativeLS;
public ref class A_Wrapper abstract
{
public:
A_Wrapper(void);
virtual double solve(OtherWrapper ^) =0;
};
public ref class B_Wrapper abstract: public A_Wrapper
{
private:
B * nativeLS;
public:
B_Wrapper(void);
virtual double solve(OtherWrapper ^) =0;
virtual B * getNative();
};
我发现的错误是:
错误:'new'或'override'是必需的,因为此声明与函数A:solve匹配
如果我使用虚拟double solve(OtherWrapper^)覆盖
而不是使用虚拟双解算(OtherWrapper^)=0我在.cpp文件中实现了member函数,然后它就可以工作了。我希望B_包装是抽象的,这样我就不必实现B_包装::solve(…)
。我错过了什么
希望我已经清楚了,有人能帮助我。
提前感谢。只需从B_包装的声明中删除solve
由于您继承的是A_包装
,因此solve
方法已经声明。您不需要再次声明它,只需重新迭代该方法没有实现的事实
public ref class A_Wrapper abstract
{
public:
A_Wrapper(void);
virtual double solve(OtherWrapper ^) =0;
};
public ref class B_Wrapper abstract: public A_Wrapper
{
private:
B* nativeLS;
public:
B_Wrapper(void);
virtual B * getNative();
};
C++/CLI编译器正试图阻止您跳脚。B_包装类有两个名为solve()的方法。从_包装继承的和您添加的。添加的一个隐藏继承的一个
此场景是C++中非常常见的错误,在修改虚拟方法时添加参数。如果未对基本方法进行编辑,则该方法不再覆盖该基本方法。很难诊断。C++/CLI语言在这方面做得很早。后来在C++11中加入了覆盖修饰符。如果要重写基方法并在打算隐藏时显式使用new,则必须使用重写
很有可能这两种方法在这里都不是故意的,因为您实际上没有重写抽象方法,并且没有任何可以想象的理由要隐藏继承的方法。只需删除B_包装中的solve()方法声明,您已经从A_包装中继承了该方法声明。我用下面的方法用“override”关键字进行了解析
基类
派生类
ref class DataBackUp
{
public:
virtual void StartBackUp(void) = 0;
};
ref class FlatBackup : public DataBackUp
{
public:
void StartBackUp(void) override
{
}
};