如果是以下代码,则显示的错误如下:
类型“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()
我已经尝试了所有我能想到的东西,包括一些看似愚蠢的东西,但我没有选择,并决定尝试我能想到的所有选项。
感谢您提供的任何帮助!
答案 0 :(得分:0)
使用g ++时,错误消息不那么模糊:
new HereBeTheError()
替代 HereBeTheError a;
Exception::eThrowException(&a); //This works
会编译,但会导致内存泄漏。
这样做的一种方法是使用局部变量:
#!/bin/bash
DIR=$(dirname "$@")
exec unzip "$@" -d "${DIR}"
你也可以通过引用而不是指针来传递参数。然后你可以传递一个临时的,条件是它是一个const引用(demo)。