类返回对象类型,但如何返回和检查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()) {
    // ...
}