所以我有FRead函数从文件中读取数据。如果函数返回错误代码,我需要完成程序。这样做是否可以接受:
string check=FRead(vec);
如果检查有特定值,则输入一些if语句来完成程序。
当我调用该函数时,它是程序中唯一的实例,显然我不能多次调用它。它似乎工作正常,但我不太确定它是否是正确的方法。那么,有什么方法可以做我想做的事情吗?
我还有KRead函数从键盘读取输入,如果出现问题也会返回错误代码。我称之为
if(KRead=='ERROR')
return 1
这样可以吗?
答案 0 :(得分:1)
使用错误代码或异常总是更好。两者之间的选择取决于实施。我做了一些示例应用程序,一般解释字符串错误,错误代码和异常是什么。
这会有效,但它很难看,你也不知道在没有禁用GenerateError()
函数的情况下定义了哪些错误。
#include <string>
#include <iostream>
class Example
{
public:
std::string GenerateError(bool error)
{
if (error)
{
return "ERROR";
}
return "OK";
};
};
int main()
{
Example example;
if ("ERROR" == example.GenerateError(true))
{
return 1; // failure
}
return 0; // success
}
使用enum
指定可用的错误代码(在本例中为Ok
,Error
和Error2
)。这使代码更容易理解,它可以帮助您避免错误。使用枚举,您还可以使用switch
。
#include <string>
#include <iostream>
enum ErrorCodes
{
Ok = 0,
Error,
Error2
//...
};
class Example
{
public:
ErrorCodes GenerateError(bool error)
{
if (error)
{
return ErrorCodes::Error;
}
return ErrorCodes::Ok;
};
};
int main()
{
Example example;
// Regular if statement
if (ErrorCodes::Ok == example.GenerateError(true))
{
return 1; // failure
}
else
{
return 0; // success
}
// switch statement
switch (example.GenerateError(true))
{
case Error:
case Error2:
return 1; // failure
break;
case Ok:
return 0; // success
break;
}
return 0;
}
例外情况稍微复杂一点,但绝对值得一试。当您希望强制该函数的用户对错误执行某些操作时,请使用异常。当函数不需要对错误执行操作时,最好使用错误代码。
#include <string>
#include <iostream>
class CustomException :public std::exception{
public:
CustomException(const std::string m) :strMessage(m){}
~CustomException(void);
const char* what(){ return strMessage.c_str(); }
private:
std::string strMessage;
};
class Example
{
public:
void GenerateError(bool error)
{
if (error)
{
throw CustomException("Critical error");
}
return;
};
};
int main()
{
Example example;
try
{
example.GenerateError(true);
}
catch (CustomException ce)
{
std::cerr << ce.what() << std::endl;
return 1; // failure
}
return 0; // success
}
答案 1 :(得分:0)
在C ++中处理错误条件的一个好方法是让函数在出现问题时抛出异常。然后,您可以在调用时检查异常。请参阅http://www.cplusplus.com/doc/tutorial/exceptions/。
答案 2 :(得分:0)
这很好。像其他人所说,你可以使用错误代码而不是字符串。