我正在写机械工程的本科论文,但在绘制数据时遇到了麻烦。该项目是使用计算机视觉自动生成真实世界对象的高质量 CAD 模型。
我想将处理后的数据传递给 GNUPLOT 以便快速生成图表。我正在使用临时文件来回传递数据。(注意:如果您知道一种更清洁的方法,那么一定要指出来。)
但是,每次我尝试编译程序时,都会出现以下错误:
/home/ryan/Code/FullyReversed/fullyreversed.cpp:-1: error: undefined reference
to `QImage fr::Plotter::plot<double>(std::vector<double, std::allocator<double> >,
unsigned int, unsigned int)'
我不明白这个错误来自哪里。似乎编译器正在用vector<double>
另一个更复杂的结构替换我
所以,简而言之,我将数据传递给的方式有什么问题Plotter::plot
?
在我的程序的主要课程中:
void MainWindow::plotData()
{
double i;
vector<double> intensity;
static QImage plot;
for(i=-10;i<10;i+=.1){
intensity.push_back(1/(i*i+1));
}
plot = Plotter::plot(intensity,800,600);
showQ(plot);
}
在辅助Plotter
类中:
template <typename T>
QImage Plotter::plot(vector<T, allocator<T> > data, unsigned int width, unsigned int height){
// for creating the filename
char buffer[256];
// the file we'll be writing to
ofstream file;
// loop counter
unsigned int i;
// time file generated
time_t ftime = time(NULL);
// generate the filename
sprintf(buffer,"%d.dat",ftime);
// open the file
file.open(buffer);
// write the data to the file
for(i=0;i<data.size();i++){
file << i << " " << data.at(i) << endl;
}
//generate the command
sprintf(buffer,"gnuplot -e \"set terminal png size %d, %d;set output '%d.png';plot sin(x);\"",width,height,ftime);
// call GNUPLOT
system(buffer);
// load the image
sprintf(buffer,"%d.png",ftime);
QImage out = QImage(buffer);
return out;
}