gpt4 book ai didi

c++ - 带有 ITK 和 FFTW 的 VS2008 中的错误 LNK2019(未解析的外部符号)

转载 作者:行者123 更新时间:2023-11-30 04:33:40 26 4
gpt4 key购买 nike

我正在使用 ITK 执行一个处理医学图像的项目。经过大量工作后,没有进一步的编译错误,但在链接过程中,我得到以下信息:

1>------Generation started: proyect: prueba_r01, configuration: Debug Win32 ------1>Linking…1>Creating library C:\Documents and Settings\GTTS\Mis documentos\Visual Studio 2008\Projects\prueba_r01\Debug\prueba_r01.lib and object C:\Documents and Settings\GTTS\Mis documentos\Visual Studio 2008\Projects\prueba_r01\Debug\prueba_r01.exp

1>prueba_r01.obj : error LNK2019: extern symbol "public: double (* __thiscall prueba_r01::multiply_matrix_2D(double ()[2],double ()[2],int,int))[2]" (?multiply_matrix_2D@prueba_r01@@QAEPAY01NPAY01N0HH@Z) unresolved which is referenced in the function "private: void __thiscall prueba_r01::filtro(void)" (?filtro@prueba_r01@@AAEXXZ)

1>C:\Documents and Settings\GTTS\Mis documentos\Visual Studio 2008\Projects\prueba_r01\Debug\prueba_r01.exe : fatal error LNK1120: 1 externos sin resolver

1>prueba_r01 - 2 errors, 0 warnings========== Generar: 0 corrects, 1 incorrects, 0 actualized, 0 omited ==========

方法 multiply_matrix_2D 在私有(private)槽“filtro()”(翻译为过滤器)中调用时产生错误文件的标题是:

#include <QtGui/QMainWindow>
#include "ui_prueba_r01.h"
#include "vicdef.h"
#include "itkImage.h"
#include "math.h"
#include <complex>
#include "fftw3.h"
using namespace std;

#define PI 3.14159265

class prueba_r01 : public QMainWindow
{
Q_OBJECT

public:
typedef double PixelType;
typedef itk::Image < PixelType, 2> ImageType;
ImageType::Pointer imagen;

double** H;

prueba_r01(QWidget *parent = 0, Qt::WFlags flags = 0);
~prueba_r01();

void matrix2D_H(int ancho, int alto, double eta, double sigma);
fftw_complex* multiply_matrix_2D(fftw_complex* out, fftw_complex* H,int a, int b);

private slots:
void openRGB();
void filtro();


private:
Ui::prueba_r01Class ui;
};

#endif // PRUEBA_R01_H

而问题所在的主要部分在.cpp文件中,显示在这里:

fftw_complex* res ;
res = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*a*b);
fftw_complex* H_casted= reinterpret_cast<fftw_complex*> (&H);
res = multiply_matrix_2D(out,H_casted, a, b);

转换一个**double指针到*fftw_complex的过程是在这里完成的,因为我想在频域(H(w))乘以图像的fft变换结果,这就是原因。重要的是要注意 fftw_complex 是 double[2],第一行是实部,第二行是虚部有问题的方法如下所示:

 fftw_complex* multiply_matrix_2D(fftw_complex* out, fftw_complex* H, int a ,int b){
/* The matrix out[axb] or [n0x(n1/2)+1] is the image after the FFT , and the out_H[axb] is the filter in the frequency domain,
both are multiplied POINT TO POINT, it has to be called twice, one for the imaginary part and another for the normal part
*/
fftw_complex *res;
res = (fftw_complex*) fftw_malloc(sizeof(fftw_complex)*a*b);
for (int i0 = 0; i0<a ; i0++){
for (int i1 = 0; i1<b ; i1++){
res[i1+a*i0][0] = out[i1+a*i0][0]*(H[0][0]+H[0][1]); // real part
res[i1+a*i0][1] = out[i1+a*i0][1]*(H[0][0]+H[0][1]); // imaginary part
}
}
return res;
}

任何帮助都会非常好!!我现在迷路了……谢谢!谢谢!安东尼奥

最佳答案

将cpp文件中的函数头改为:

fftw_complex* prueba_r01::multiply_matrix_2D(fftw_complex* out, fftw_complex* H, int a, int b) 

你忘记了实现中的类名(prueba_r01::),所以找不到函数体

关于c++ - 带有 ITK 和 FFTW 的 VS2008 中的错误 LNK2019(未解析的外部符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6623596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com