вектор & л; двойной & GT; ошибка типа

Я работаю над магистерской диссертацией в области машиностроения, и у меня возникают проблемы с отображением данных. Проект состоит в том, чтобы использовать компьютерное зрение для автоматической генерации высококачественной модели САПР реального объекта.

Я хочу передать обработанные данные в 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;
}

1

Решение

Это признак определения шаблонной функции в исходном файле вместо файла заголовка.

Шаблон не является реальной функцией, это всего лишь инструкции по созданию функции. Весь код должен быть доступен в той точке, где вы его вызываете, чтобы компилятор мог сгенерировать для вас подходящую функцию. Если его нет, он предполагает, что он определен где-то еще, и оставляет компоновщик, чтобы выяснить это.

0

Другие решения

Кажется, вы спрашиваете о часто решаемой проблеме: вы определили свой шаблон в модуле перевода, где он невидим для компилятора, когда вы фактически создаете экземпляр шаблона. Это нормально, если вы понимаете, что вам нужно явно создать экземпляр шаблона, если его определение не может быть найдено компилятором для неявного создания экземпляра.

Явная реализация будет выглядеть примерно так:

template QImage Plotter::plot(vector<double> data, unsigned int width, unsigned int height);
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector