背景
我正在使用VES在iOS设备上利用Kiwi点云查看器。
错误
vesVector3f v = self->mKiwiApp->cameraFocalPoint();
NSLog(@"%@", v);
导致
Cannot pass non-POD object of type `vesVector3f` (aka 'Matrix<float, 3, 1>') to variadic function; expected type from format string was 'id'
问题
我知道NSLog
应该输出id
类型的对象。如何让NSLog
输出类型vesVector3f
?
额外详情
以下是我发现的有关自定义类型的一些细节。看起来Vector3f
是3个浮点数的向量。
typedef Eigen::Vector3f vesVector3f;
EIGEN_MAKE_TYPEDEFS_ALL_SIZES(float, f)
根据trojanfoe
的评论:
NSLog(@"%f, %f, %f", v(0, 0), v(1, 0), v(2, 0));
答案 0 :(得分:3)
这看起来像Objective-C ++,Eigen是一个C ++库。
您希望打印每个浮动成员变量,如下所示:
NSLog(@"%f, %f, %f", v(0, 0), v(1, 0), v(2, 0));
我说&#34;像这样的事情&#34;因为我从未使用过Eigen。
您只能将%@
与Objective-C类一起使用,您可以覆盖description
方法,以使其符合您的喜好。
答案 1 :(得分:2)
如何让NSLog输出类型vesVector3f?
它需要是一个对象,正如错误消息告诉您的那样。如果它是结构,则不能通过NSLog直接输出。您可以自己单独输出三个浮点数。但是,如果您要做很多事情,例如,您可以编写一个例程,将三个浮点数转换为字符串并输出该字符串。这就是像NSStringFromCGVector这样的内置例程。