Redian新闻
>
c++问题在线等(PCL库编译)
avatar
c++问题在线等(PCL库编译)# Programming - 葵花宝典
R*6
1
以下是函数重载参数匹配问题。看起来,3会用1,4会用2。visual studio 2015编译器
同意3用1,却不同意4用2。作为人类,我彻底蒙圈了,参数cord和maxp没给呀,3用1为
啥就对了?
static Pointer New(const Point3D& size, const Point3D&
spacing=Point3D(1,1,1), const Point3D& origin=Point3D>(0,0,0))
static Pointer New(const Point3D& size, const Point3D&
spacing, const Point3D& origin, const OrientationMatrixType& matrix)
static Pointer New(const Point3D& minp, const Point3D& maxp,
const Point3D& spacing=Point3D(1,1,1), const Point3D
& origin=Point3D(0,0,0))
static Pointer New(const Point3D& minp, const Point3D& maxp,
const Point3D& spacing, const Point3D& origin, const
OrientationMatrixType& matrix)
/*1*/ static Pointer New(const typename BufferType::Pointer& ptr, const
Point3D& buffer_coord, const Point3D& minp, const Point3D&
maxp, const Point3D& spacing=Point3D(1,1,1), const Point3D<
double>& origin=Point3D(0,0,0))
/*2*/ static Pointer New(const typename BufferType::Pointer& ptr, const
Point3D& buffer_coord, const Point3D& minp, const Point3D&
maxp, const Point3D& spacing, const Point3D& origin, const
OrientationMatrixType& matrix)
/*3*/ static Pointer New(ValueType* ptr, bool own, const Point3D&
size, const Point3D& minp=Point3D(0,0,0), const Point3D&
spacing=Point3D(1,1,1), const Point3D& origin=Point3D>(0,0,0))
{
typename BufferType::Pointer buffer = BufferType::New(ptr, size.x(),
size.y(), size.z(), own);
return New(buffer, minp, spacing, origin);
}

/*4*/ static Pointer New(ValueType* ptr, bool own, const Point3D&
size, const Point3D& minp, const Point3D& spacing, const
Point3D& origin, const OrientationMatrixType& matrix)
{
typename BufferType::Pointer buffer = BufferType::New(ptr, size.x(),
size.y(), size.z(), own);
return New(buffer, minp, spacing, origin, matrix);
}
avatar
w*g
2
1的signature是(Pointer &, 三个Point3D const &, 带默认值的参数)
3传进去四个参数,所以能对上的,剩下都有默认值。
不过能干活的前提是Point3D能自动转Point3D
但是按参数名字看,显然3用1是个bug。
2的signature是(Pointer &, 三个Point3D const &, 两个Point3D
const &, const Matrix &)
一共有7个参数, 全没有默认值。所以必须传入7个才行。 4才传入了5个参数。
所以编译器不认。

double
matrix)
double>

【在 R******6 的大作中提到】
: 以下是函数重载参数匹配问题。看起来,3会用1,4会用2。visual studio 2015编译器
: 同意3用1,却不同意4用2。作为人类,我彻底蒙圈了,参数cord和maxp没给呀,3用1为
: 啥就对了?
: static Pointer New(const Point3D& size, const Point3D&
: spacing=Point3D(1,1,1), const Point3D& origin=Point3D: >(0,0,0))
: static Pointer New(const Point3D& size, const Point3D&
: spacing, const Point3D& origin, const OrientationMatrixType& matrix)
: static Pointer New(const Point3D& minp, const Point3D& maxp,
: const Point3D& spacing=Point3D(1,1,1), const Point3D

avatar
R*6
3
多谢老大!你是说,编译器先按参数数目匹配一次,不看参数类型?我先无语一次!那
问题来了,最后总要匹配类型传进去?就看匹配上的那对
定义:
static Pointer New(const typename BufferType::Pointer& ptr, buffer
const Point3D& buffer_coord,
const Point3D& minp,
const Point3D& maxp,
const Point3D& spacing=Point3D(1,1,1), spacing
const Point3D& origin=Point3D(0,0,0)) origin
使用:
return New(buffer, minp, spacing, origin);
"&还没有值
。要我说,应该传给buffer_coord,minp和maxp给NULL。按顺序来嘛。编译器怎么就把
minp给了minp呢?

【在 w***g 的大作中提到】
: 1的signature是(Pointer &, 三个Point3D const &, 带默认值的参数)
: 3传进去四个参数,所以能对上的,剩下都有默认值。
: 不过能干活的前提是Point3D能自动转Point3D
: 但是按参数名字看,显然3用1是个bug。
: 2的signature是(Pointer &, 三个Point3D const &, 两个Point3D
: const &, const Matrix &)
: 一共有7个参数, 全没有默认值。所以必须传入7个才行。 4才传入了5个参数。
: 所以编译器不认。
:
: double

avatar
R*6
4
您说的Point3D自动转Point3D也是一种可能,那spacing、
orientation都传错了,给了minp和maxp。那真是bug。pcl库这么写c++,不会错吧?
pcl 1.7的image.txx文件

【在 w***g 的大作中提到】
: 1的signature是(Pointer &, 三个Point3D const &, 带默认值的参数)
: 3传进去四个参数,所以能对上的,剩下都有默认值。
: 不过能干活的前提是Point3D能自动转Point3D
: 但是按参数名字看,显然3用1是个bug。
: 2的signature是(Pointer &, 三个Point3D const &, 两个Point3D
: const &, const Matrix &)
: 一共有7个参数, 全没有默认值。所以必须传入7个才行。 4才传入了5个参数。
: 所以编译器不认。
:
: double

avatar
w*g
5
编译器按顺序传,不看名字的。 spacing被传给了maxp。
先花两天学一下基本语法吧,会省你很多时间。

【在 R******6 的大作中提到】
: 多谢老大!你是说,编译器先按参数数目匹配一次,不看参数类型?我先无语一次!那
: 问题来了,最后总要匹配类型传进去?就看匹配上的那对
: 定义:
: static Pointer New(const typename BufferType::Pointer& ptr, : buffer
: const Point3D& buffer_coord,
: const Point3D& minp,
: const Point3D& maxp,
: const Point3D& spacing=Point3D(1,1,1), : spacing

avatar
R*6
6
那就是库函数确实有bug.....只是因为大家老用(0,0,0)这种东西,一直没发作。真是
受教了!
dispatch、传参数查类型,这是人类共识。库函数一般都对,也是人类共识。然后我就
琢磨,c++编译器特别聪明,最后弄对了。然后人类就懵了
这段程序在公司应该是run了十几年了....重新build一次就弄出bug,真衰呀

【在 w***g 的大作中提到】
: 编译器按顺序传,不看名字的。 spacing被传给了maxp。
: 先花两天学一下基本语法吧,会省你很多时间。

avatar
w*g
7
PCL存在不少时间了,你既然都看到源代码了,不妨加个print语句确认一下看
是不是真的调用了1。C++程序有时候绕来绕去的,不一定那么直接。
我怀疑它的程序还是对的,是你我理解有问题。

【在 R******6 的大作中提到】
: 那就是库函数确实有bug.....只是因为大家老用(0,0,0)这种东西,一直没发作。真是
: 受教了!
: dispatch、传参数查类型,这是人类共识。库函数一般都对,也是人类共识。然后我就
: 琢磨,c++编译器特别聪明,最后弄对了。然后人类就懵了
: 这段程序在公司应该是run了十几年了....重新build一次就弄出bug,真衰呀

avatar
R*6
8
源码没法贴,PCL version 1.7的image/image.txx,有时间您帮我看一下吧。
您说的加打印语句,确实值得一试。现在在rebuild好多东西,离运行还有一大块距离
。rebuild的时候编译不通过,所以发贴问,make a hypothesis,改一下代码,再
rebuild一堆,老麻烦了。我也希望什么都没错,就是我理解错了。那样的话,跟老板
最好解释:)
非常感谢。

【在 w***g 的大作中提到】
: PCL存在不少时间了,你既然都看到源代码了,不妨加个print语句确认一下看
: 是不是真的调用了1。C++程序有时候绕来绕去的,不一定那么直接。
: 我怀疑它的程序还是对的,是你我理解有问题。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。