我知道这可能是以下内容的重复: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 temporary
和conversion 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;