Inheritance c++/cli sintaxis:错误:';新';或';覆盖';是必需的,因为此声明与函数匹配 我想用C++编写一个包装器,用C++图形接口与C++库通信。

Inheritance 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;

当我想在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:
B_Wrapper(void);
virtual double solve(OtherWrapper ^) =0;
virtual B * getNative();
};
我发现的错误是: 错误:'new'或'override'是必需的,因为此声明与函数A:solve匹配

如果我使用虚拟
double solve(OtherWrapper^)覆盖
而不是使用
虚拟双解算(OtherWrapper^)=0B_包装::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
        {
        }

};