c语言如何返回空指针,如何在C中返回NULL对象

  • Post author:
  • Post category:其他

我知道这可能是重复的:

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);

}

但是我得到一个引用返回NULL行的错误:从’int’转换为非标量类型’Normal’请求

另一个错误和警告,引用最后一个返回行:警告:获取临时地址和从“正常*”转换为非标量类型“正常”请求

我理解为什么我会收到此警告,但我不知道如何解决它.如何在函数结束后持续存在的最后一行返回Normal对象,如何在第一次返回NULL对象? (如果这些类型的退货有一个术语,请告诉我,以便我也可以阅读更多内容.)

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

我尝试这样做:正常*球体::在cpp文件中命中(雷射线)和普通*命中(雷射线);在头文件中,我收到此错误:错误:’Normal * Sphere :: hit(Ray)’的原型与’Sphere’类中的任何一个都不匹配

我也试过这个:普通球体:: *在cpp文件中命中(雷射线)和普通*命中(雷射线);在头文件中我得到第二个return语句的错误:无法将’Normal *’转换为’Normal Sphere :: *’作为回报

进一步澄清:我不是在询问指针是如何工作的. (这不是主要问题.)我想知道有关C中指针的语法.所以,鉴于我上面指定的函数,我已经收集到我应该指定一个返回指针,因为C没有空对象.得到它了.但是,问题就变成了:函数原型应该是什么样的?在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(雷射线),但我仍然得到这样的信息:’Normal * Sphere :: hit(Ray)’的原型与类’Sphere’中的任何一个都不匹配此时,它是我不清楚为什么它找不到那个功能原型.这是头文件:

class Sphere

{

public:

Sphere();

Vector3 center;

float radius;

Normal* hit(Ray ray);

};

任何人都可以看到为什么它抱怨在Sphere类中没有匹配的原型? (我可能会把这个问题移到一个单独的问题……)