继承类的“类型不兼容的参数”

时间:2017-12-14 20:19:20

标签: c++ error-handling arguments

如果是以下代码,则显示的错误如下:

  

类型“ThatThingThatUsesExceptions :: HereBeTheError *”的参数与“Exception *”类型的参数不兼容

这是我的实际代码所示的完整错误:

  

(活动)类型“Input :: ErrorNoPinSet *”的E0167参数与“Exception *”类型的参数不兼容AddingOOP c:\ MyFilePathToMyRepoDir \ DroneSoftware \ ArduinoBasedCode \ AddingOOP \ Input.cpp 17

我正在为无人机编写大量代码,因此很多代码都会在微控制器上运行,遗憾的是,这些代码通常不具备使用try-catch错误处理的能力。我试图以一种非常黑客的方式实现它,但我遇到了一些问题。

这是正在发生的事情的极简化版本:

class Exception
{
public:
    static void eThrowException(Exception* error)
    {
        Serial.println(error->what());
    }

    virtual const char* what();
};

class ThingThatUsesTheExceptions
{
private:
    struct HereBeTheError : public Exception { const char* what() { return "Yarrrrr me matey"; } };

protected:
    void cFunctionThatTriggersAnError()
    {
        Exception::eThrowException(&HereBeTheError()); //This is where the error occurs.
    }
};

我应该提到所有这些都被分成了自己的文件。 Exception.h包含声明,Exception.cpp包含定义,与ThatThingThatUsesExceptions相同。我不确定为什么错误会抛出。我已经尝试了很多不同的组合,将以下组合传递给eThrowException:

&HereBeTheError()
*HereBeTheError()
new HereBeTheError()
HereBeTheError()
*new HereBeTheError()
&new HereBeTheError()

我已经尝试了所有我能想到的东西,包括一些看似愚蠢的东西,但我没有选择,并决定尝试我能想到的所有选项。

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

使用g ++时,错误消息不那么模糊:

new HereBeTheError()

替代 HereBeTheError a; Exception::eThrowException(&a); //This works 会编译,但会导致内存泄漏。

这样做的一种方法是使用局部变量:

#!/bin/bash
DIR=$(dirname "$@")
exec unzip "$@" -d "${DIR}"

你也可以通过引用而不是指针来传递参数。然后你可以传递一个临时的,条件是它是一个const引用(demo)。