我想在生成PCD文件时利用系统时间构造文件名,代码如下所示(Qt5.4.1 MSVC 2010 + PCL1.8.0):
#include <QCoreApplication>
#include <QDateTime>
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
std::string s = QDateTime::currentDateTime().toString("yyyy.MM.dd hh:mm:ss").toStdString();
std::string t = "dev1 " + s + ".pcd";
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
cloud->width = 5;
cloud->height = 1;
cloud->points.resize(cloud->width * cloud->height);
for(int i = 0; i < cloud->points.size(); i++)
{
cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);
cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
cloud->points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
}
pcl::io::savePCDFileASCII(t, *cloud); //方式1
//std::string* tt = new std::string(t); //方式2
//pcl::io::savePCDFileASCII(*tt, *cloud);
//pcl::PCDWriter writer; //方式3
//writer.write(t, *cloud);
}
以上三种方式都会出错,出错处为pcd_io.hpp中第480行
template<type PointT> int
pcl::PCDWrter::wrteASCII (const std::string &file_name, const pcl::PointCloud<PointT> &cloud, const int precision)
中
if(!fs.is_open() || fs.fail())
{
throw pcl::IOException ("[pcl::PCDWrter::writeASCII] Could not open file for writing!");
return (-1);
}
抛出异常这一行
可能只是个小问题,但是实在没有搞清楚问题出在哪儿。如果用字符串常量替换变量t,程序可以正常运行。希望论坛中的大神可以指点迷津!谢谢!
|