我知道这可能是以下内容的重复:Return a "NULL" object if search result not found

但是,我的代码有一些不同之处,因为星号不能解决我的问题,这是:

Normal Sphere::hit(Ray ray) {
   //stuff is done here
   if(something happens) {
       return NULL;
   }
   //other stuff
   return Normal(something, somethingElse);
}

但是我在引用return NULL行时遇到错误:conversion from ‘int’ to non-scalar type ‘Normal’ requested
另一个错误和警告引用了最后一个返回行:warning: taking address of temporaryconversion from ‘Normal*’ to non-scalar type 'Normal' requested
我理解为什么收到此警告,但是我不知道如何解决它。我如何在函数结束后仍存在的最后一行中返回Normal对象,以及如何在第一次返回NULL对象? (如果有关于这类返回的术语,请告诉我,以便我也可以进一步阅读。)

为了弄清楚评论者的问题,我尝试了以下方法:

我尝试这样做:cpp文件中的Normal *Sphere::hit(Ray ray)和头文件中的Normal *hit( Ray ray );,但出现此错误:error: prototype for ‘Normal* Sphere::hit(Ray)’ does not match any in class 'Sphere'
我也尝试过这样:cpp文件中的Normal Sphere::*hit(Ray ray)和头文件中的Normal *hit( Ray ray);,第二条return语句出现此错误:cannot convert 'Normal*' to 'Normal Sphere::*' in return
进一步说明:我不是在问指针如何工作。 (这不是主要问题。)我想知道有关C++中指针的语法。因此,鉴于我上面指定的功能,我已经收集到应该指定一个返回指针的信息,因为C++没有空对象。得到它了。但是,问题就变成了:函数原型(prototype)应该是什么样?在cpp文件中,我具有Bala的建议(这是我最初的建议,但由于以下错误而更改了它):
Normal* Sphere::hit(Ray ray) {
   //stuff is done here
   if(something happens) {
       return NULL;
   }
   //other stuff
   return new Normal(something, somethingElse);
}

在头文件中,我有Normal *hit(Ray ray),但是仍然收到此消息:prototype for 'Normal* Sphere::hit(Ray)' does not match any in class 'Sphere'在这一点上,我不清楚为什么它找不到该函数原型(prototype)。这是头文件:
class Sphere
{
    public:
        Sphere();
        Vector3 center;
        float radius;
        Normal* hit(Ray ray);
};

谁能看到为什么提示hit类中不存在Sphere的匹配原型(prototype)? (我可能将其移至另一个问题...)

最佳答案

我想你需要像

Normal* Sphere::hit(Ray ray) {
   //stuff is done here
   if(something happens) {
       return NULL;
   }
   //other stuff
   return new Normal(something, somethingElse);
}

能够返回NULL;

07-24 09:45
查看更多