类返回对象类型,但如何返回和检查null 我对C++是相当新的,我正在研究一个项目,我有一个方法,它被声明如下:
类返回对象类型,但如何返回和检查null 我对C++是相当新的,我正在研究一个项目,我有一个方法,它被声明如下:,c++,object,return-value,C++,Object,Return Value,SupportTicket SupportProcessor::getSupportTicket(int-supportRef) 上述方法在数据库中查找记录,如果找到,将返回类型为SupportTicket的对象。但是,如果由于找不到supportRef或由于数据库错误,现在找到了它,我不想返回任何内容,即NULL。虽然方法本身没有抱怨,但是当我检查返回的值是否为NULL时,我得到了一个错误 例如,我调用我的方法如下: SupportTicket supportTicket = this->
SupportTicket SupportProcessor::getSupportTicket(int-supportRef)
上述方法在数据库中查找记录,如果找到,将返回类型为SupportTicket
的对象。但是,如果由于找不到supportRef或由于数据库错误,现在找到了它,我不想返回任何内容,即NULL
。虽然方法本身没有抱怨,但是当我检查返回的值是否为NULL时,我得到了一个错误
例如,我调用我的方法如下:
SupportTicket supportTicket = this->getSupportTicket(1);
if (supportTicket != NULL)
{
//The record was found
}
else
{
//The record was not found or an error occurred
}
我得到的错误是:
no operator "!=" matches these operands
binary '!=' no operator found which takes a left-hand operand of type 'SupportTicket' (or there is no acceptable conversion)
在getSupportTicket方法中,我尝试了返回NULL和nullptr
<>我来自C背景,所以这是完全正常的,那么我怎么做C++呢?我知道在这个方法中,我可以通过执行
return new SupportTicket()
然后在返回到的方法中删除它来在堆上分配返回值,但这似乎有点过分,或者这是唯一的方法 首先是错误。这可能是因为您的SupportTicket
类既不能与NULL
进行比较,也不能与nullptr
进行比较。我甚至不知道如何从函数中返回空票证,因为从您发布的代码中很难推断出空票证。无论如何,C++和其他语言(如C语言或java)有很大的不同,不能简单地从函数返回空引用,以指示你不想/你不能返回指定类型的对象。 如果
SupportTicket
支持两种有效状态,例如正确初始化和绝对未初始化,则可以为该类或isValid
成员函数定义运算符bool()
,并直接在保护中使用它们:
if(myTicket) {
// ...
}
或:
在C++17中,您可以使用返回类型替换为:
类模板std::optional管理可选包含的值,即可能存在或不存在的值
它有一个操作符bool()
,用于测试对象是否已正确初始化。有关更多详细信息,请参阅链接文档
在C++11/14中,您可以使用std::unique_ptr
并在出现故障时返回未初始化的指针。缺点是必须在动态存储器上创建对象本身。如果对你来说是好是坏主要取决于实际问题,我不能这么说。否则,您可以在github上寻找
std::optional
的替代实现(示例),或者如果您的编译器提供了
。稍微不那么用户友好的解决方案是抛出异常,但它会强制调用方将任何调用嵌入
try/catch
块中,这通常非常烦人。如果该方法返回一个对象,它就不能返回NULL
NULL
是指针值。你可以让它抛出一个异常。或者让它返回一个唯一的\u ptr
。
if(myTicket.isValid()) {
// ...
}