【问题标题】:Overriding virtual function differs C++ [duplicate]覆盖虚函数不同于C++ [重复]
【发布时间】:2020-12-30 18:59:19
【问题描述】:

我是 C++ 新手。我已经下载了this project,当我尝试运行它时,我得到:

Severity    Code    Description Project File    Line    Suppression State
Error   C2695   'TFruityGain::Idle': overriding virtual function differs from 'TCPPFruityPlug::Idle' only by calling convention FruityGain_VC   c:source\c\fruitygain_vc\gain.h 38  

C++ 类:

class TFruityGain : public TCPPFruityPlug {
    private:
    public:
    virtual void _stdcall Idle();

};

class TCPPFruityPlug : public TFruityPlug {
    // some audio properties
    TAudioRenderer AudioRenderer;

    // temp buffer
    PWAV32FM ProcessTempBuffer;
    int MaxProcessLength;

    float PitchMul;
    TFruityPlugHost *PlugHost;

    virtual void Idle();
};

【问题讨论】:

  • TCPPFruityPlug 中完全删除virtual void Idle(); 行。该行声明了一个逻辑上独立的 new 虚拟方法。我假设你想覆盖TFruityGain::Idle,在这种情况下你不需要TCPPFruityPlug的类定义中的任何东西,因为C++不需要显式的override(尽管你应该使用它:en.cppreference.com/w/cpp/language/override
  • 我认为您需要在TFruityGainTCPPFruityPlug 中的某个函数中添加或删除_stdcall
  • 请先搜索错误信息,在这种情况下还要搜索 Cxxxx 错误代码。
  • 如果您使用的是C++11或更高版本,您应该将TFruityGain中的virtual void _stdcall Idle();更改为void Idle() override;
  • @UlrichEckhardt 我做了,但我不明白,它是一个示例项目,我希望它能够工作,如果有任何问题,它会是配置的东西。

标签: c++


【解决方案1】:

与 'TCPPFruityPlug::Idle' 的区别仅在于调用约定

这个问题源于你有:

virtual void _stdcall Idle();

virtual void Idle();

当你重写一个你想要相同调用约定的函数时,请参阅:

What is the meaning and usage of __stdcall?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 2010-10-09
    • 1970-01-01
    • 2020-08-21
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多