【问题标题】:Errors while reading a text file读取文本文件时出错
【发布时间】:2024-08-03 08:40:02
【问题描述】:

我在用 c++ 读取文本文件时遇到问题,我不知道出了什么问题。我需要从文件中读取几个复数并使用 matlab 函数进行一些计算。所以在此之前我编译了 matlab 库并将它们包含到我的项目中。我对它们进行了测试,它工作正常。但是当我添加几行代码来从文件中读取数据时,我得到了一些错误: 这是我的代码:

#include "spectrum.h"
#include <iostream>
#include <fstream>
#include <complex>

using namespace std;

int main(){

    mclInitializeApplication(NULL,0);
    spectrumInitialize();
    cout<<"Initialization success"<<endl;


    double input[4] = {10,20,30,40};
    mxArray *x_ptr, *x_ptr1;
    mxArray *y_ptr=NULL;
    mxArray *y_ptr1=NULL;
    double *y;
    double *y1;

    complex<double> com[256];

    ifstream myfile("dep.txt"); 

    double a = NULL;
    for(int i=0; i<256;i++)
    {
        myfile >> a;
        com[i].real(a);
        myfile >> a;
        com[i].imag(a);
    }
    myfile.close();

    x_ptr1 = mxCreateDoubleScalar(256);
    x_ptr = mxCreateDoubleMatrix(1,256,mxCOMPLEX);
    memcpy((void *)mxGetPr(x_ptr), (void *) com,256*sizeof(complex<double>));

    mlfSpectrum_slice(1,&y_ptr,x_ptr,x_ptr1);

    y = (double*)mxGetPr(y_ptr);

    cout<<"Data: "<<input<<endl;
    cout<<"Result: "<<*y<<endl;

    mxDestroyArray(x_ptr);
    mxDestroyArray(y_ptr);

    spectrumTerminate();
    mclTerminateApplication();
    return 0;
}

我也尝试使用 fstream 和 ifstream。有人知道我在做什么错吗? 顺便说一句,我使用的是 Windows 7 32bit、Visual Studio 2012 和 Matlab R2012b。

【问题讨论】:

  • 错误是什么?
  • 看起来某些 matlab 生成的 c 文件包含对在其他 matlab 生成的 c 文件中定义的函数的调用,而您的构建中没有包含这些函数。尝试找出哪个 c 文件包含诸如 CrtDbgReportW(...) 之类的定义,并确保您正在构建它并将生成的对象与最终图像链接。
  • 疯狂猜测:您是否试图将 Matlab 库的调试版本链接到您自己项目的发布版本? _CrtDbgReportW 仅存在于 VC 运行时的调试版本中,因此如果您使用 _DEBUG 宏编译 Matlab 库,但将其链接到非调试运行时库,则此错误是有意义的。

标签: c++ matlab


【解决方案1】:

你有一个链接问题。链接器找不到函数 CrtDbgReport。这是微软的调试功能。这完全是关于使用 OutputDebugString API 编写调试消息。 Microsoft lib 是 kernel32.lib - 所以你有链接吗?具体来说,它正在寻找 Unicode 版本,即末尾的 W:CrtDbgReportW。因此,您必须在某处设置了 Unicode 构建。即#define UNICODE。

你的库可能没有使用 Unicode。

另一种可能性是您正在链接调试 matlab 库,但您正在构建程序的发布版本。反之亦然。

【讨论】: