如何返回错误消息字符串

mel*_*not 5 c++ string error-handling

我已经用 C++ 为外围设备编写了一个驱动程序,总之,在交互过程中可能会出现许多错误。我已经为所有可能的错误定义了错误代码。我想写一个方法,让用户能够查询错误代码的含义。

请记住,我总共有 17 个可能的错误。相应的消息具有不同的长度。

我已经用一个接受错误代码并返回带有错误消息的字符串的函数解决了这个问题。该函数使用错误代码循环遍历 switch case 例程,每种情况都会返回不同的错误消息,如下所示。

std::string getErrorMessage(int errorCode)
{
    std::string errorMessage = "no error" ;

    switch(errorCode) {
    case 0:
        errorMessage = "no error" ;
        break ;
    case 10:
        errorMessage = "there is a network error" ;
        break ;
    case 40:
        errorMessage = "there is a network or protocol error" ;
        break ;
    default:
        errorMessage = "unknown error" ;
    }

    return errorMessage ;
}
Run Code Online (Sandbox Code Playgroud)

这个函数可以工作,但它不是一个“漂亮”的解决方案。有人对更好的解决方案有任何想法或建议吗?

tri*_*tan 5

如果你的错误数量不大,使用表格会更有效

char *error[SIZE] = 
 {
   [0] = "NO error",
   [10] = "there is a network error",
   [40] = "there is a network or protocol error",
    ....
}
Run Code Online (Sandbox Code Playgroud)

您需要一些防御性检查来确保错误号在范围内。

我记得这就是 glibc 实现 strerror() 的方式。


Jam*_*nze 3

如果您的错误代码很少,那么交换机可能是最好的解决方案。但是,如果您可以使它们变得密集,那么您可以将错误消息放入表中并使用错误代码对其进行索引。