模板中 > 标记之前的预期表达式 class
Expected expression before > token in template class
我正在尝试在其中一个函数中实例化一个模板 class,但由于某种原因我无法这样做。它告诉我错误并指向行的开头,这没有意义。
template<typename O>
class ray{
...
color<O> ray_color(const ray<O>& ray, const hittable_list<O>& world, O t_Min, O t_Max, int depth){
hit_record<O> rec;
if (world.hit(ray, t_Min, t_Max, rec)){
Vec3<O> target = rec.p + rec.normal + Vec3<O>::random_in_unit_sphere();
ray<O> new_ray(rec.p, (target - rec.p)); //line where it fails
ray.direction() = target - rec.p;
return ray_color(new_ray, world, t_Min, t_Max, depth-1) * 0.5;
}
它给我这个错误:
Ray.h: In member function ‘color ray::ray_color(const ray&, const hittable_list&, O, O, int)’:
Ray.h:61:16: error: expected primary-expression before ‘>’ token
ray<O> new_ray(rec.p, (target - rec.p));
^
这也会导致 new_array 未声明并给出后续错误。
我在其他地方用相同的语法创建了射线对象,但只有这个给我一个错误。给出了什么?
注意:我知道 class 函数应该在单独的 cpp 文件中实现。我打算在我的程序运行后像这样进行所有清理工作。
您的一个参数名为 ray
,因此在函数体中任何对 ray
的引用都是指该参数,而不是定义函数的 class 名称。
解决方法很简单:调用其他参数。
我正在尝试在其中一个函数中实例化一个模板 class,但由于某种原因我无法这样做。它告诉我错误并指向行的开头,这没有意义。
template<typename O>
class ray{
...
color<O> ray_color(const ray<O>& ray, const hittable_list<O>& world, O t_Min, O t_Max, int depth){
hit_record<O> rec;
if (world.hit(ray, t_Min, t_Max, rec)){
Vec3<O> target = rec.p + rec.normal + Vec3<O>::random_in_unit_sphere();
ray<O> new_ray(rec.p, (target - rec.p)); //line where it fails
ray.direction() = target - rec.p;
return ray_color(new_ray, world, t_Min, t_Max, depth-1) * 0.5;
}
它给我这个错误:
Ray.h: In member function ‘color ray::ray_color(const ray&, const hittable_list&, O, O, int)’:
Ray.h:61:16: error: expected primary-expression before ‘>’ token
ray<O> new_ray(rec.p, (target - rec.p));
^
这也会导致 new_array 未声明并给出后续错误。
我在其他地方用相同的语法创建了射线对象,但只有这个给我一个错误。给出了什么?
注意:我知道 class 函数应该在单独的 cpp 文件中实现。我打算在我的程序运行后像这样进行所有清理工作。
您的一个参数名为 ray
,因此在函数体中任何对 ray
的引用都是指该参数,而不是定义函数的 class 名称。
解决方法很简单:调用其他参数。